diff options
Diffstat (limited to 'sysdeps')
315 files changed, 0 insertions, 27896 deletions
diff --git a/sysdeps/alpha/Implies b/sysdeps/alpha/Implies deleted file mode 100644 index 18c35908c4..0000000000 --- a/sysdeps/alpha/Implies +++ /dev/null @@ -1,6 +0,0 @@ -wordsize-64 -# Alpha uses IEEE 754 single, double and quad precision floating point. -ieee754/ldbl-128 -ieee754/dbl-64 -ieee754/flt-32 -alpha/soft-fp diff --git a/sysdeps/alpha/Makefile b/sysdeps/alpha/Makefile deleted file mode 100644 index 725ae43584..0000000000 --- a/sysdeps/alpha/Makefile +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright (C) 1993, 94, 95, 96, 97, 99 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# Contributed by Brendan Kehoe (brendan@zen.org). - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 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 -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -# 02111-1307 USA. - -ifeq ($(subdir),db2) -CPPFLAGS += -DHAVE_SPINLOCKS=1 -DHAVE_ASSEM_ALPHA=1 -endif - -ifeq ($(subdir),gmon) -sysdep_routines += _mcount -endif - -ifeq ($(subdir),gnulib) -sysdep_routines += divl divlu divq divqu reml remlu remq remqu -endif - -ifeq ($(subdir),string) -sysdep_routines += stxcpy stxncpy -endif - -ifeq ($(subdir),elf) -# The ld.so startup code cannot use literals until it self-relocates. -CFLAGS-rtld.c = -mbuild-constants -endif - -# Build everything with full IEEE math support, and with dynamic rounding; -# there are a number of math routines that are defined to work with the -# "current" rounding mode, and it's easiest to set this with all of them. -sysdep-CFLAGS += -mieee -mfp-rounding-mode=d - -# libc.so requires about 16k for the small data area, which is well -# below the 64k maximum. -pic-ccflag = -fpic diff --git a/sysdeps/alpha/Subdirs b/sysdeps/alpha/Subdirs deleted file mode 100644 index 87eadf3024..0000000000 --- a/sysdeps/alpha/Subdirs +++ /dev/null @@ -1 +0,0 @@ -soft-fp diff --git a/sysdeps/alpha/Versions b/sysdeps/alpha/Versions deleted file mode 100644 index 76b67a6b90..0000000000 --- a/sysdeps/alpha/Versions +++ /dev/null @@ -1,13 +0,0 @@ -libc { - GLIBC_2.0 { - # functions with special/multiple interfaces - __divqu; __remqu; __divqs; __remqs; __divlu; __remlu; __divls; - __remls; __divl; __reml; __divq; __remq; __divqu; __remqu; - } -} -libm { - GLIBC_2.0 { - # used in inline functions. - __atan2; - } -} diff --git a/sysdeps/alpha/__longjmp.S b/sysdeps/alpha/__longjmp.S deleted file mode 100644 index bed26658de..0000000000 --- a/sysdeps/alpha/__longjmp.S +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 1992, 1994, 1997, 2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __ASSEMBLY__ - -#include <sysdep.h> -#include <jmpbuf-offsets.h> - - -ENTRY(__longjmp) -#ifdef PROF - ldgp gp, 0(pv) - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at - .prologue 1 -#else - .prologue 0 -#endif - - mov a1, v0 - ldq s0, JB_S0*8(a0) - ldq s1, JB_S1*8(a0) - ldq s2, JB_S2*8(a0) - ldq s3, JB_S3*8(a0) - ldq s4, JB_S4*8(a0) - ldq s5, JB_S5*8(a0) - ldq ra, JB_PC*8(a0) - ldq fp, JB_FP*8(a0) - ldq t0, JB_SP*8(a0) - ldt $f2, JB_F2*8(a0) - ldt $f3, JB_F3*8(a0) - ldt $f4, JB_F4*8(a0) - ldt $f5, JB_F5*8(a0) - ldt $f6, JB_F6*8(a0) - ldt $f7, JB_F7*8(a0) - ldt $f8, JB_F8*8(a0) - ldt $f9, JB_F9*8(a0) -#ifdef PTR_DEMANGLE - PTR_DEMANGLE(ra, t1) - PTR_DEMANGLE2(t0, t1) - PTR_DEMANGLE2(fp, t1) -#endif - cmoveq v0, 1, v0 - mov t0, sp - ret - -END(__longjmp) diff --git a/sysdeps/alpha/_mcount.S b/sysdeps/alpha/_mcount.S deleted file mode 100644 index c4c921b4f7..0000000000 --- a/sysdeps/alpha/_mcount.S +++ /dev/null @@ -1,107 +0,0 @@ -/* Machine-specific calling sequence for `mcount' profiling function. alpha - Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. - Contributed by David Mosberger (davidm@cs.arizona.edu). - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Assembly stub to invoke _mcount(). Compiler generated code calls - this stub after executing a function's prologue and without saving any - registers. It is therefore necessary to preserve a0..a5 as they may - contain function arguments. To work correctly with frame- less - functions, it is also necessary to preserve ra. Finally, division - routines are invoked with a special calling convention and the - compiler treats those calls as if they were instructions. In - particular, it doesn't save any of the temporary registers (caller - saved registers). It is therefore necessary to preserve all - caller-saved registers as well. - - Upon entering _mcount, register $at holds the return address and ra - holds the return address of the function's caller (selfpc and frompc, - respectively in gmon.c language...). */ - -#include <sysdep.h> - - .set noat - .set noreorder - -LEAF(_mcount, 0xb0) - .prologue 0 - - subq sp, 0xb0, sp - stq a0, 0x00(sp) - mov ra, a0 # a0 = caller-pc - stq a1, 0x08(sp) - mov $at, a1 # a1 = self-pc - stq $at, 0x10(sp) - - stq a2, 0x18(sp) - stq a3, 0x20(sp) - stq a4, 0x28(sp) - stq a5, 0x30(sp) - stq ra, 0x38(sp) - stq gp, 0x40(sp) - - br gp, 1f -1: ldgp gp, 0(gp) - - stq t0, 0x48(sp) - stq t1, 0x50(sp) - stq t2, 0x58(sp) - stq t3, 0x60(sp) - stq t4, 0x68(sp) - stq t5, 0x70(sp) - stq t6, 0x78(sp) - - stq t7, 0x80(sp) - stq t8, 0x88(sp) - stq t9, 0x90(sp) - stq t10, 0x98(sp) - stq t11, 0xa0(sp) - stq v0, 0xa8(sp) - - jsr ra, __mcount - - ldq a0, 0x00(sp) - ldq a1, 0x08(sp) - ldq $at, 0x10(sp) # restore self-pc - ldq a2, 0x18(sp) - ldq a3, 0x20(sp) - ldq a4, 0x28(sp) - ldq a5, 0x30(sp) - ldq ra, 0x38(sp) - ldq gp, 0x40(sp) - mov $at, pv # make pv point to return address - ldq t0, 0x48(sp) # this is important under OSF/1 to - ldq t1, 0x50(sp) # ensure that the code that we return - ldq t2, 0x58(sp) # can correctly compute its gp - ldq t3, 0x60(sp) - ldq t4, 0x68(sp) - ldq t5, 0x70(sp) - ldq t6, 0x78(sp) - ldq t7, 0x80(sp) - ldq t8, 0x88(sp) - ldq t9, 0x90(sp) - ldq t10, 0x98(sp) - ldq t11, 0xa0(sp) - ldq v0, 0xa8(sp) - - addq sp, 0xb0, sp - ret zero,($at),1 - - END(_mcount) - -weak_alias (_mcount, mcount) diff --git a/sysdeps/alpha/add_n.s b/sysdeps/alpha/add_n.s deleted file mode 100644 index e0dc2fd0c4..0000000000 --- a/sysdeps/alpha/add_n.s +++ /dev/null @@ -1,120 +0,0 @@ - # Alpha __mpn_add_n -- Add two limb vectors of the same length > 0 and - # store sum in a third limb vector. - - # Copyright (C) 1995 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP 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 Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP 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. - - - # INPUT PARAMETERS - # res_ptr $16 - # s1_ptr $17 - # s2_ptr $18 - # size $19 - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_add_n - .ent __mpn_add_n -__mpn_add_n: - .frame $30,0,$26,0 - - ldq $3,0($17) - ldq $4,0($18) - - subq $19,1,$19 - and $19,4-1,$2 # number of limbs in first loop - bis $31,$31,$0 - beq $2,.L0 # if multiple of 4 limbs, skip first loop - - subq $19,$2,$19 - -.Loop0: subq $2,1,$2 - ldq $5,8($17) - addq $4,$0,$4 - ldq $6,8($18) - cmpult $4,$0,$1 - addq $3,$4,$4 - cmpult $4,$3,$0 - stq $4,0($16) - or $0,$1,$0 - - addq $17,8,$17 - addq $18,8,$18 - bis $5,$5,$3 - bis $6,$6,$4 - addq $16,8,$16 - bne $2,.Loop0 - -.L0: beq $19,.Lend - - .align 3 -.Loop: subq $19,4,$19 - - ldq $5,8($17) - addq $4,$0,$4 - ldq $6,8($18) - cmpult $4,$0,$1 - addq $3,$4,$4 - cmpult $4,$3,$0 - stq $4,0($16) - or $0,$1,$0 - - ldq $3,16($17) - addq $6,$0,$6 - ldq $4,16($18) - cmpult $6,$0,$1 - addq $5,$6,$6 - cmpult $6,$5,$0 - stq $6,8($16) - or $0,$1,$0 - - ldq $5,24($17) - addq $4,$0,$4 - ldq $6,24($18) - cmpult $4,$0,$1 - addq $3,$4,$4 - cmpult $4,$3,$0 - stq $4,16($16) - or $0,$1,$0 - - ldq $3,32($17) - addq $6,$0,$6 - ldq $4,32($18) - cmpult $6,$0,$1 - addq $5,$6,$6 - cmpult $6,$5,$0 - stq $6,24($16) - or $0,$1,$0 - - addq $17,32,$17 - addq $18,32,$18 - addq $16,32,$16 - bne $19,.Loop - -.Lend: addq $4,$0,$4 - cmpult $4,$0,$1 - addq $3,$4,$4 - cmpult $4,$3,$0 - stq $4,0($16) - or $0,$1,$0 - ret $31,($26),1 - - .end __mpn_add_n diff --git a/sysdeps/alpha/addmul_1.s b/sysdeps/alpha/addmul_1.s deleted file mode 100644 index da26c692ae..0000000000 --- a/sysdeps/alpha/addmul_1.s +++ /dev/null @@ -1,92 +0,0 @@ - # Alpha 21064 __mpn_addmul_1 -- Multiply a limb vector with a limb and add - # the result to a second limb vector. - - # Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP 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 Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP 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. - - - # INPUT PARAMETERS - # res_ptr r16 - # s1_ptr r17 - # size r18 - # s2_limb r19 - - # This code runs at 42 cycles/limb on EV4 and 18 cycles/limb on EV5. - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_addmul_1 - .ent __mpn_addmul_1 2 -__mpn_addmul_1: - .frame $30,0,$26 - - ldq $2,0($17) # $2 = s1_limb - addq $17,8,$17 # s1_ptr++ - subq $18,1,$18 # size-- - mulq $2,$19,$3 # $3 = prod_low - ldq $5,0($16) # $5 = *res_ptr - umulh $2,$19,$0 # $0 = prod_high - beq $18,.Lend1 # jump if size was == 1 - ldq $2,0($17) # $2 = s1_limb - addq $17,8,$17 # s1_ptr++ - subq $18,1,$18 # size-- - addq $5,$3,$3 - cmpult $3,$5,$4 - stq $3,0($16) - addq $16,8,$16 # res_ptr++ - beq $18,.Lend2 # jump if size was == 2 - - .align 3 -.Loop: mulq $2,$19,$3 # $3 = prod_low - ldq $5,0($16) # $5 = *res_ptr - addq $4,$0,$0 # cy_limb = cy_limb + 'cy' - subq $18,1,$18 # size-- - umulh $2,$19,$4 # $4 = cy_limb - ldq $2,0($17) # $2 = s1_limb - addq $17,8,$17 # s1_ptr++ - addq $3,$0,$3 # $3 = cy_limb + prod_low - cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) - addq $5,$3,$3 - cmpult $3,$5,$5 - stq $3,0($16) - addq $16,8,$16 # res_ptr++ - addq $5,$0,$0 # combine carries - bne $18,.Loop - -.Lend2: mulq $2,$19,$3 # $3 = prod_low - ldq $5,0($16) # $5 = *res_ptr - addq $4,$0,$0 # cy_limb = cy_limb + 'cy' - umulh $2,$19,$4 # $4 = cy_limb - addq $3,$0,$3 # $3 = cy_limb + prod_low - cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) - addq $5,$3,$3 - cmpult $3,$5,$5 - stq $3,0($16) - addq $5,$0,$0 # combine carries - addq $4,$0,$0 # cy_limb = prod_high + cy - ret $31,($26),1 -.Lend1: addq $5,$3,$3 - cmpult $3,$5,$5 - stq $3,0($16) - addq $0,$5,$0 - ret $31,($26),1 - - .end __mpn_addmul_1 diff --git a/sysdeps/alpha/alphaev5/add_n.s b/sysdeps/alpha/alphaev5/add_n.s deleted file mode 100644 index 1ff8e9543f..0000000000 --- a/sysdeps/alpha/alphaev5/add_n.s +++ /dev/null @@ -1,148 +0,0 @@ - # Alpha __mpn_add_n -- Add two limb vectors of the same length > 0 and - # store sum in a third limb vector. - - # Copyright (C) 1995 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP 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 Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP 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. - - - # INPUT PARAMETERS - # res_ptr $16 - # s1_ptr $17 - # s2_ptr $18 - # size $19 - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_add_n - .ent __mpn_add_n -__mpn_add_n: - .frame $30,0,$26,0 - - or $31,$31,$25 # clear cy - subq $19,4,$19 # decr loop cnt - blt $19,.Lend2 # if less than 4 limbs, goto 2nd loop - # Start software pipeline for 1st loop - ldq $0,0($18) - ldq $1,8($18) - ldq $4,0($17) - ldq $5,8($17) - addq $17,32,$17 # update s1_ptr - ldq $2,16($18) - addq $0,$4,$20 # 1st main add - ldq $3,24($18) - subq $19,4,$19 # decr loop cnt - ldq $6,-16($17) - cmpult $20,$0,$25 # compute cy from last add - ldq $7,-8($17) - addq $1,$25,$28 # cy add - addq $18,32,$18 # update s2_ptr - addq $5,$28,$21 # 2nd main add - cmpult $28,$25,$8 # compute cy from last add - blt $19,.Lend1 # if less than 4 limbs remain, jump - # 1st loop handles groups of 4 limbs in a software pipeline - .align 4 -.Loop: cmpult $21,$28,$25 # compute cy from last add - ldq $0,0($18) - or $8,$25,$25 # combine cy from the two adds - ldq $1,8($18) - addq $2,$25,$28 # cy add - ldq $4,0($17) - addq $28,$6,$22 # 3rd main add - ldq $5,8($17) - cmpult $28,$25,$8 # compute cy from last add - cmpult $22,$28,$25 # compute cy from last add - stq $20,0($16) - or $8,$25,$25 # combine cy from the two adds - stq $21,8($16) - addq $3,$25,$28 # cy add - addq $28,$7,$23 # 4th main add - cmpult $28,$25,$8 # compute cy from last add - cmpult $23,$28,$25 # compute cy from last add - addq $17,32,$17 # update s1_ptr - or $8,$25,$25 # combine cy from the two adds - addq $16,32,$16 # update res_ptr - addq $0,$25,$28 # cy add - ldq $2,16($18) - addq $4,$28,$20 # 1st main add - ldq $3,24($18) - cmpult $28,$25,$8 # compute cy from last add - ldq $6,-16($17) - cmpult $20,$28,$25 # compute cy from last add - ldq $7,-8($17) - or $8,$25,$25 # combine cy from the two adds - subq $19,4,$19 # decr loop cnt - stq $22,-16($16) - addq $1,$25,$28 # cy add - stq $23,-8($16) - addq $5,$28,$21 # 2nd main add - addq $18,32,$18 # update s2_ptr - cmpult $28,$25,$8 # compute cy from last add - bge $19,.Loop - # Finish software pipeline for 1st loop -.Lend1: cmpult $21,$28,$25 # compute cy from last add - or $8,$25,$25 # combine cy from the two adds - addq $2,$25,$28 # cy add - addq $28,$6,$22 # 3rd main add - cmpult $28,$25,$8 # compute cy from last add - cmpult $22,$28,$25 # compute cy from last add - stq $20,0($16) - or $8,$25,$25 # combine cy from the two adds - stq $21,8($16) - addq $3,$25,$28 # cy add - addq $28,$7,$23 # 4th main add - cmpult $28,$25,$8 # compute cy from last add - cmpult $23,$28,$25 # compute cy from last add - or $8,$25,$25 # combine cy from the two adds - addq $16,32,$16 # update res_ptr - stq $22,-16($16) - stq $23,-8($16) -.Lend2: addq $19,4,$19 # restore loop cnt - beq $19,.Lret - # Start software pipeline for 2nd loop - ldq $0,0($18) - ldq $4,0($17) - subq $19,1,$19 - beq $19,.Lend0 - # 2nd loop handles remaining 1-3 limbs - .align 4 -.Loop0: addq $0,$25,$28 # cy add - ldq $0,8($18) - addq $4,$28,$20 # main add - ldq $4,8($17) - addq $18,8,$18 - cmpult $28,$25,$8 # compute cy from last add - addq $17,8,$17 - stq $20,0($16) - cmpult $20,$28,$25 # compute cy from last add - subq $19,1,$19 # decr loop cnt - or $8,$25,$25 # combine cy from the two adds - addq $16,8,$16 - bne $19,.Loop0 -.Lend0: addq $0,$25,$28 # cy add - addq $4,$28,$20 # main add - cmpult $28,$25,$8 # compute cy from last add - cmpult $20,$28,$25 # compute cy from last add - stq $20,0($16) - or $8,$25,$25 # combine cy from the two adds - -.Lret: or $25,$31,$0 # return cy - ret $31,($26),1 - .end __mpn_add_n diff --git a/sysdeps/alpha/alphaev5/lshift.s b/sysdeps/alpha/alphaev5/lshift.s deleted file mode 100644 index e41ce9a91e..0000000000 --- a/sysdeps/alpha/alphaev5/lshift.s +++ /dev/null @@ -1,174 +0,0 @@ - # Alpha EV5 __mpn_lshift -- - - # Copyright (C) 1994, 1995 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP 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 Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP 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. - - - # INPUT PARAMETERS - # res_ptr r16 - # s1_ptr r17 - # size r18 - # cnt r19 - - # This code runs at 3.25 cycles/limb on the EV5. - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_lshift - .ent __mpn_lshift -__mpn_lshift: - .frame $30,0,$26,0 - - s8addq $18,$17,$17 # make r17 point at end of s1 - ldq $4,-8($17) # load first limb - subq $31,$19,$20 - s8addq $18,$16,$16 # make r16 point at end of RES - subq $18,1,$18 - and $18,4-1,$28 # number of limbs in first loop - srl $4,$20,$0 # compute function result - - beq $28,.L0 - subq $18,$28,$18 - - .align 3 -.Loop0: ldq $3,-16($17) - subq $16,8,$16 - sll $4,$19,$5 - subq $17,8,$17 - subq $28,1,$28 - srl $3,$20,$6 - or $3,$3,$4 - or $5,$6,$8 - stq $8,0($16) - bne $28,.Loop0 - -.L0: sll $4,$19,$24 - beq $18,.Lend - # warm up phase 1 - ldq $1,-16($17) - subq $18,4,$18 - ldq $2,-24($17) - ldq $3,-32($17) - ldq $4,-40($17) - beq $18,.Lend1 - # warm up phase 2 - srl $1,$20,$7 - sll $1,$19,$21 - srl $2,$20,$8 - ldq $1,-48($17) - sll $2,$19,$22 - ldq $2,-56($17) - srl $3,$20,$5 - or $7,$24,$7 - sll $3,$19,$23 - or $8,$21,$8 - srl $4,$20,$6 - ldq $3,-64($17) - sll $4,$19,$24 - ldq $4,-72($17) - subq $18,4,$18 - beq $18,.Lend2 - .align 4 - # main loop -.Loop: stq $7,-8($16) - or $5,$22,$5 - stq $8,-16($16) - or $6,$23,$6 - - srl $1,$20,$7 - subq $18,4,$18 - sll $1,$19,$21 - unop # ldq $31,-96($17) - - srl $2,$20,$8 - ldq $1,-80($17) - sll $2,$19,$22 - ldq $2,-88($17) - - stq $5,-24($16) - or $7,$24,$7 - stq $6,-32($16) - or $8,$21,$8 - - srl $3,$20,$5 - unop # ldq $31,-96($17) - sll $3,$19,$23 - subq $16,32,$16 - - srl $4,$20,$6 - ldq $3,-96($17) - sll $4,$19,$24 - ldq $4,-104($17) - - subq $17,32,$17 - bne $18,.Loop - # cool down phase 2/1 -.Lend2: stq $7,-8($16) - or $5,$22,$5 - stq $8,-16($16) - or $6,$23,$6 - srl $1,$20,$7 - sll $1,$19,$21 - srl $2,$20,$8 - sll $2,$19,$22 - stq $5,-24($16) - or $7,$24,$7 - stq $6,-32($16) - or $8,$21,$8 - srl $3,$20,$5 - sll $3,$19,$23 - srl $4,$20,$6 - sll $4,$19,$24 - # cool down phase 2/2 - stq $7,-40($16) - or $5,$22,$5 - stq $8,-48($16) - or $6,$23,$6 - stq $5,-56($16) - stq $6,-64($16) - # cool down phase 2/3 - stq $24,-72($16) - ret $31,($26),1 - - # cool down phase 1/1 -.Lend1: srl $1,$20,$7 - sll $1,$19,$21 - srl $2,$20,$8 - sll $2,$19,$22 - srl $3,$20,$5 - or $7,$24,$7 - sll $3,$19,$23 - or $8,$21,$8 - srl $4,$20,$6 - sll $4,$19,$24 - # cool down phase 1/2 - stq $7,-8($16) - or $5,$22,$5 - stq $8,-16($16) - or $6,$23,$6 - stq $5,-24($16) - stq $6,-32($16) - stq $24,-40($16) - ret $31,($26),1 - -.Lend: stq $24,-8($16) - ret $31,($26),1 - .end __mpn_lshift diff --git a/sysdeps/alpha/alphaev5/rshift.s b/sysdeps/alpha/alphaev5/rshift.s deleted file mode 100644 index 9948e50002..0000000000 --- a/sysdeps/alpha/alphaev5/rshift.s +++ /dev/null @@ -1,172 +0,0 @@ - # Alpha EV5 __mpn_rshift -- - - # Copyright (C) 1994, 1995 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP 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 Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP 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. - - - # INPUT PARAMETERS - # res_ptr r16 - # s1_ptr r17 - # size r18 - # cnt r19 - - # This code runs at 3.25 cycles/limb on the EV5. - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_rshift - .ent __mpn_rshift -__mpn_rshift: - .frame $30,0,$26,0 - - ldq $4,0($17) # load first limb - subq $31,$19,$20 - subq $18,1,$18 - and $18,4-1,$28 # number of limbs in first loop - sll $4,$20,$0 # compute function result - - beq $28,.L0 - subq $18,$28,$18 - - .align 3 -.Loop0: ldq $3,8($17) - addq $16,8,$16 - srl $4,$19,$5 - addq $17,8,$17 - subq $28,1,$28 - sll $3,$20,$6 - or $3,$3,$4 - or $5,$6,$8 - stq $8,-8($16) - bne $28,.Loop0 - -.L0: srl $4,$19,$24 - beq $18,.Lend - # warm up phase 1 - ldq $1,8($17) - subq $18,4,$18 - ldq $2,16($17) - ldq $3,24($17) - ldq $4,32($17) - beq $18,.Lend1 - # warm up phase 2 - sll $1,$20,$7 - srl $1,$19,$21 - sll $2,$20,$8 - ldq $1,40($17) - srl $2,$19,$22 - ldq $2,48($17) - sll $3,$20,$5 - or $7,$24,$7 - srl $3,$19,$23 - or $8,$21,$8 - sll $4,$20,$6 - ldq $3,56($17) - srl $4,$19,$24 - ldq $4,64($17) - subq $18,4,$18 - beq $18,.Lend2 - .align 4 - # main loop -.Loop: stq $7,0($16) - or $5,$22,$5 - stq $8,8($16) - or $6,$23,$6 - - sll $1,$20,$7 - subq $18,4,$18 - srl $1,$19,$21 - unop # ldq $31,-96($17) - - sll $2,$20,$8 - ldq $1,72($17) - srl $2,$19,$22 - ldq $2,80($17) - - stq $5,16($16) - or $7,$24,$7 - stq $6,24($16) - or $8,$21,$8 - - sll $3,$20,$5 - unop # ldq $31,-96($17) - srl $3,$19,$23 - addq $16,32,$16 - - sll $4,$20,$6 - ldq $3,88($17) - srl $4,$19,$24 - ldq $4,96($17) - - addq $17,32,$17 - bne $18,.Loop - # cool down phase 2/1 -.Lend2: stq $7,0($16) - or $5,$22,$5 - stq $8,8($16) - or $6,$23,$6 - sll $1,$20,$7 - srl $1,$19,$21 - sll $2,$20,$8 - srl $2,$19,$22 - stq $5,16($16) - or $7,$24,$7 - stq $6,24($16) - or $8,$21,$8 - sll $3,$20,$5 - srl $3,$19,$23 - sll $4,$20,$6 - srl $4,$19,$24 - # cool down phase 2/2 - stq $7,32($16) - or $5,$22,$5 - stq $8,40($16) - or $6,$23,$6 - stq $5,48($16) - stq $6,56($16) - # cool down phase 2/3 - stq $24,64($16) - ret $31,($26),1 - - # cool down phase 1/1 -.Lend1: sll $1,$20,$7 - srl $1,$19,$21 - sll $2,$20,$8 - srl $2,$19,$22 - sll $3,$20,$5 - or $7,$24,$7 - srl $3,$19,$23 - or $8,$21,$8 - sll $4,$20,$6 - srl $4,$19,$24 - # cool down phase 1/2 - stq $7,0($16) - or $5,$22,$5 - stq $8,8($16) - or $6,$23,$6 - stq $5,16($16) - stq $6,24($16) - stq $24,32($16) - ret $31,($26),1 - -.Lend: stq $24,0($16) - ret $31,($26),1 - .end __mpn_rshift diff --git a/sysdeps/alpha/alphaev5/sub_n.s b/sysdeps/alpha/alphaev5/sub_n.s deleted file mode 100644 index 3c706cf237..0000000000 --- a/sysdeps/alpha/alphaev5/sub_n.s +++ /dev/null @@ -1,149 +0,0 @@ - # Alpha __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and - # store difference in a third limb vector. - - # Copyright (C) 1995 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP 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 Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP 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. - - - # INPUT PARAMETERS - # res_ptr $16 - # s1_ptr $17 - # s2_ptr $18 - # size $19 - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_sub_n - .ent __mpn_sub_n -__mpn_sub_n: - .frame $30,0,$26,0 - - or $31,$31,$25 # clear cy - subq $19,4,$19 # decr loop cnt - blt $19,.Lend2 # if less than 4 limbs, goto 2nd loop - # Start software pipeline for 1st loop - ldq $0,0($18) - ldq $1,8($18) - ldq $4,0($17) - ldq $5,8($17) - addq $17,32,$17 # update s1_ptr - ldq $2,16($18) - subq $4,$0,$20 # 1st main sub - ldq $3,24($18) - subq $19,4,$19 # decr loop cnt - ldq $6,-16($17) - cmpult $4,$20,$25 # compute cy from last sub - ldq $7,-8($17) - addq $1,$25,$28 # cy add - addq $18,32,$18 # update s2_ptr - subq $5,$28,$21 # 2nd main sub - cmpult $28,$25,$8 # compute cy from last add - blt $19,.Lend1 # if less than 4 limbs remain, jump - # 1st loop handles groups of 4 limbs in a software pipeline - .align 4 -.Loop: cmpult $5,$21,$25 # compute cy from last add - ldq $0,0($18) - or $8,$25,$25 # combine cy from the two adds - ldq $1,8($18) - addq $2,$25,$28 # cy add - ldq $4,0($17) - subq $6,$28,$22 # 3rd main sub - ldq $5,8($17) - cmpult $28,$25,$8 # compute cy from last add - cmpult $6,$22,$25 # compute cy from last add - stq $20,0($16) - or $8,$25,$25 # combine cy from the two adds - stq $21,8($16) - addq $3,$25,$28 # cy add - subq $7,$28,$23 # 4th main sub - cmpult $28,$25,$8 # compute cy from last add - cmpult $7,$23,$25 # compute cy from last add - addq $17,32,$17 # update s1_ptr - or $8,$25,$25 # combine cy from the two adds - addq $16,32,$16 # update res_ptr - addq $0,$25,$28 # cy add - ldq $2,16($18) - subq $4,$28,$20 # 1st main sub - ldq $3,24($18) - cmpult $28,$25,$8 # compute cy from last add - ldq $6,-16($17) - cmpult $4,$20,$25 # compute cy from last add - ldq $7,-8($17) - or $8,$25,$25 # combine cy from the two adds - subq $19,4,$19 # decr loop cnt - stq $22,-16($16) - addq $1,$25,$28 # cy add - stq $23,-8($16) - subq $5,$28,$21 # 2nd main sub - addq $18,32,$18 # update s2_ptr - cmpult $28,$25,$8 # compute cy from last add - bge $19,.Loop - # Finish software pipeline for 1st loop -.Lend1: cmpult $5,$21,$25 # compute cy from last add - or $8,$25,$25 # combine cy from the two adds - addq $2,$25,$28 # cy add - subq $6,$28,$22 # 3rd main sub - cmpult $28,$25,$8 # compute cy from last add - cmpult $6,$22,$25 # compute cy from last add - stq $20,0($16) - or $8,$25,$25 # combine cy from the two adds - stq $21,8($16) - addq $3,$25,$28 # cy add - subq $7,$28,$23 # 4th main sub - cmpult $28,$25,$8 # compute cy from last add - cmpult $7,$23,$25 # compute cy from last add - or $8,$25,$25 # combine cy from the two adds - addq $16,32,$16 # update res_ptr - stq $22,-16($16) - stq $23,-8($16) -.Lend2: addq $19,4,$19 # restore loop cnt - beq $19,.Lret - # Start software pipeline for 2nd loop - ldq $0,0($18) - ldq $4,0($17) - subq $19,1,$19 - beq $19,.Lend0 - # 2nd loop handles remaining 1-3 limbs - .align 4 -.Loop0: addq $0,$25,$28 # cy add - ldq $0,8($18) - subq $4,$28,$20 # main sub - ldq $1,8($17) - addq $18,8,$18 - cmpult $28,$25,$8 # compute cy from last add - addq $17,8,$17 - stq $20,0($16) - cmpult $4,$20,$25 # compute cy from last add - subq $19,1,$19 # decr loop cnt - or $8,$25,$25 # combine cy from the two adds - addq $16,8,$16 - or $1,$31,$4 - bne $19,.Loop0 -.Lend0: addq $0,$25,$28 # cy add - subq $4,$28,$20 # main sub - cmpult $28,$25,$8 # compute cy from last add - cmpult $4,$20,$25 # compute cy from last add - stq $20,0($16) - or $8,$25,$25 # combine cy from the two adds - -.Lret: or $25,$31,$0 # return cy - ret $31,($26),1 - .end __mpn_sub_n diff --git a/sysdeps/alpha/alphaev6/Implies b/sysdeps/alpha/alphaev6/Implies deleted file mode 100644 index 0e7fc170ba..0000000000 --- a/sysdeps/alpha/alphaev6/Implies +++ /dev/null @@ -1 +0,0 @@ -alpha/alphaev5 diff --git a/sysdeps/alpha/alphaev6/addmul_1.s b/sysdeps/alpha/alphaev6/addmul_1.s deleted file mode 100644 index a061fb9edb..0000000000 --- a/sysdeps/alpha/alphaev6/addmul_1.s +++ /dev/null @@ -1,479 +0,0 @@ - # Alpha ev6 mpn_addmul_1 -- Multiply a limb vector with a limb and add - # the result to a second limb vector. - # - # Copyright (C) 2000 Free Software Foundation, Inc. - # - # This file is part of the GNU MP Library. - # - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published - # by the Free Software Foundation; either version 2.1 of the License, or (at - # your option) any later version. - # - # The GNU MP 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 Lesser General Public - # License for more details. - # - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP 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. - - # INPUT PARAMETERS - # res_ptr $16 - # s1_ptr $17 - # size $18 - # s2_limb $19 - # - # This code runs at 42 cycles/limb on EV4, 18 cycles/limb on EV5, and - # exactly 3.625 cycles/limb on EV6... - # - # This code was written in close cooperation with ev6 pipeline expert - # Steve Root (root@toober.hlo.dec.com). Any errors are tege's fault, though. - # - # Register usages for unrolled loop: - # 0-3 mul's - # 4-7 acc's - # 8-15 mul results - # 20,21 carry's - # 22,23 save for stores - # - # Sustains 8 mul-adds in 29 cycles in the unrolled inner loop. - # - # The stores can issue a cycle late so we have paired no-op's to 'catch' - # them, so that further disturbance to the schedule is damped. - # - # We couldn't pair the loads, because the entangled schedule of the - # carry's has to happen on one side {0} of the machine. Note, the total - # use of U0, and the total use of L0 (after attending to the stores). - # which is part of the reason why.... - # - # This is a great schedule for the d_cache, a poor schedule for the - # b_cache. The lockup on U0 means that any stall can't be recovered - # from. Consider a ldq in L1. say that load gets stalled because it - # collides with a fill from the b_Cache. On the next cycle, this load - # gets priority. If first looks at L0, and goes there. The instruction - # we intended for L0 gets to look at L1, which is NOT where we want - # it. It either stalls 1, because it can't go in L0, or goes there, and - # causes a further instruction to stall. - # - # So for b_cache, we're likely going to want to put one or more cycles - # back into the code! And, of course, put in prefetches. For the - # accumulator, lds, intent to modify. For the multiplier, you might - # want ldq, evict next, if you're not wanting to use it again soon. Use - # 256 ahead of present pointer value. At a place where we have an mt - # followed by a bookkeeping, put the bookkeeping in upper, and the - # prefetch into lower. - # - # Note, the usage of physical registers per cycle is smoothed off, as - # much as possible. - # - # Note, the ldq's and stq's are at the end of the quadpacks. note, we'd - # like not to have a ldq or stq to preceded a conditional branch in a - # quadpack. The conditional branch moves the retire pointer one cycle - # later. - # - # Optimization notes: - # Callee-saves regs: $9 $10 $11 $12 $13 $14 $15 $26 ?$27? - # Reserved regs: $29 $30 $31 - # Free caller-saves regs in unrolled code: $24 $25 $28 - # We should swap some of the callee-saves regs for some of the free - # caller-saves regs, saving some overhead cycles. - # Most importantly, we should write fast code for the 0-7 case. - # The code we use there are for the 21164, and runs at 7 cycles/limb - # on the 21264. Should not be hard, if we write specialized code for - # 1-7 limbs (the one for 0 limbs should be straightforward). We then just - # need a jump table indexed by the low 3 bits of the count argument. - - .set noreorder - .set noat - .text - - .globl __mpn_addmul_1 - .ent __mpn_addmul_1 -__mpn_addmul_1: - .frame $30,0,$26,0 - .prologue 0 - - cmpult $18, 8, $1 - beq $1, $Large - - ldq $2, 0($17) # $2 = s1_limb - addq $17, 8, $17 # s1_ptr++ - subq $18, 1, $18 # size-- - mulq $2, $19, $3 # $3 = prod_low - ldq $5, 0($16) # $5 = *res_ptr - umulh $2, $19, $0 # $0 = prod_high - beq $18, $Lend0b # jump if size was == 1 - ldq $2, 0($17) # $2 = s1_limb - addq $17, 8, $17 # s1_ptr++ - subq $18, 1, $18 # size-- - addq $5, $3, $3 - cmpult $3, $5, $4 - stq $3, 0($16) - addq $16, 8, $16 # res_ptr++ - beq $18, $Lend0a # jump if size was == 2 - - .align 3 -$Loop0: mulq $2, $19, $3 # $3 = prod_low - ldq $5, 0($16) # $5 = *res_ptr - addq $4, $0, $0 # cy_limb = cy_limb + 'cy' - subq $18, 1, $18 # size-- - umulh $2, $19, $4 # $4 = cy_limb - ldq $2, 0($17) # $2 = s1_limb - addq $17, 8, $17 # s1_ptr++ - addq $3, $0, $3 # $3 = cy_limb + prod_low - cmpult $3, $0, $0 # $0 = carry from (cy_limb + prod_low) - addq $5, $3, $3 - cmpult $3, $5, $5 - stq $3, 0($16) - addq $16, 8, $16 # res_ptr++ - addq $5, $0, $0 # combine carries - bne $18, $Loop0 -$Lend0a: - mulq $2, $19, $3 # $3 = prod_low - ldq $5, 0($16) # $5 = *res_ptr - addq $4, $0, $0 # cy_limb = cy_limb + 'cy' - umulh $2, $19, $4 # $4 = cy_limb - addq $3, $0, $3 # $3 = cy_limb + prod_low - cmpult $3, $0, $0 # $0 = carry from (cy_limb + prod_low) - addq $5, $3, $3 - cmpult $3, $5, $5 - stq $3, 0($16) - addq $5, $0, $0 # combine carries - addq $4, $0, $0 # cy_limb = prod_high + cy - ret $31, ($26), 1 -$Lend0b: - addq $5, $3, $3 - cmpult $3, $5, $5 - stq $3, 0($16) - addq $0, $5, $0 - ret $31, ($26), 1 - -$Large: - lda $30, -240($30) - stq $9, 8($30) - stq $10, 16($30) - stq $11, 24($30) - stq $12, 32($30) - stq $13, 40($30) - stq $14, 48($30) - stq $15, 56($30) - - and $18, 7, $20 # count for the first loop, 0-7 - srl $18, 3, $18 # count for unrolled loop - bis $31, $31, $0 - beq $20, $Lunroll - ldq $2, 0($17) # $2 = s1_limb - addq $17, 8, $17 # s1_ptr++ - subq $20, 1, $20 # size-- - mulq $2, $19, $3 # $3 = prod_low - ldq $5, 0($16) # $5 = *res_ptr - umulh $2, $19, $0 # $0 = prod_high - beq $20, $Lend1b # jump if size was == 1 - ldq $2, 0($17) # $2 = s1_limb - addq $17, 8, $17 # s1_ptr++ - subq $20, 1, $20 # size-- - addq $5, $3, $3 - cmpult $3, $5, $4 - stq $3, 0($16) - addq $16, 8, $16 # res_ptr++ - beq $20, $Lend1a # jump if size was == 2 - - .align 3 -$Loop1: mulq $2, $19, $3 # $3 = prod_low - ldq $5, 0($16) # $5 = *res_ptr - addq $4, $0, $0 # cy_limb = cy_limb + 'cy' - subq $20, 1, $20 # size-- - umulh $2, $19, $4 # $4 = cy_limb - ldq $2, 0($17) # $2 = s1_limb - addq $17, 8, $17 # s1_ptr++ - addq $3, $0, $3 # $3 = cy_limb + prod_low - cmpult $3, $0, $0 # $0 = carry from (cy_limb + prod_low) - addq $5, $3, $3 - cmpult $3, $5, $5 - stq $3, 0($16) - addq $16, 8, $16 # res_ptr++ - addq $5, $0, $0 # combine carries - bne $20, $Loop1 - -$Lend1a: - mulq $2, $19, $3 # $3 = prod_low - ldq $5, 0($16) # $5 = *res_ptr - addq $4, $0, $0 # cy_limb = cy_limb + 'cy' - umulh $2, $19, $4 # $4 = cy_limb - addq $3, $0, $3 # $3 = cy_limb + prod_low - cmpult $3, $0, $0 # $0 = carry from (cy_limb + prod_low) - addq $5, $3, $3 - cmpult $3, $5, $5 - stq $3, 0($16) - addq $16, 8, $16 # res_ptr++ - addq $5, $0, $0 # combine carries - addq $4, $0, $0 # cy_limb = prod_high + cy - br $31, $Lunroll -$Lend1b: - addq $5, $3, $3 - cmpult $3, $5, $5 - stq $3, 0($16) - addq $16, 8, $16 # res_ptr++ - addq $0, $5, $0 - -$Lunroll: - lda $17, -16($17) # L1 bookkeeping - lda $16, -16($16) # L1 bookkeeping - bis $0, $31, $12 - - # ____ UNROLLED LOOP SOFTWARE PIPELINE STARTUP ____ - - ldq $2, 16($17) # L1 - ldq $3, 24($17) # L1 - lda $18, -1($18) # L1 bookkeeping - ldq $6, 16($16) # L1 - ldq $7, 24($16) # L1 - ldq $0, 32($17) # L1 - mulq $19, $2, $13 # U1 - ldq $1, 40($17) # L1 - umulh $19, $2, $14 # U1 - mulq $19, $3, $15 # U1 - lda $17, 64($17) # L1 bookkeeping - ldq $4, 32($16) # L1 - ldq $5, 40($16) # L1 - umulh $19, $3, $8 # U1 - ldq $2, -16($17) # L1 - mulq $19, $0, $9 # U1 - ldq $3, -8($17) # L1 - umulh $19, $0, $10 # U1 - addq $6, $13, $6 # L0 lo + acc - mulq $19, $1, $11 # U1 - cmpult $6, $13, $20 # L0 lo add => carry - lda $16, 64($16) # L1 bookkeeping - addq $6, $12, $22 # U0 hi add => answer - cmpult $22, $12, $21 # L0 hi add => carry - addq $14, $20, $14 # U0 hi mul + carry - ldq $6, -16($16) # L1 - addq $7, $15, $23 # L0 lo + acc - addq $14, $21, $14 # U0 hi mul + carry - ldq $7, -8($16) # L1 - umulh $19, $1, $12 # U1 - cmpult $23, $15, $20 # L0 lo add => carry - addq $23, $14, $23 # U0 hi add => answer - ldq $0, 0($17) # L1 - mulq $19, $2, $13 # U1 - cmpult $23, $14, $21 # L0 hi add => carry - addq $8, $20, $8 # U0 hi mul + carry - ldq $1, 8($17) # L1 - umulh $19, $2, $14 # U1 - addq $4, $9, $4 # L0 lo + acc - stq $22, -48($16) # L0 - stq $23, -40($16) # L1 - mulq $19, $3, $15 # U1 - addq $8, $21, $8 # U0 hi mul + carry - cmpult $4, $9, $20 # L0 lo add => carry - addq $4, $8, $22 # U0 hi add => answer - ble $18, $Lend # U1 bookkeeping - - # ____ MAIN UNROLLED LOOP ____ - .align 4 -$Loop: - bis $31, $31, $31 # U1 mt - cmpult $22, $8, $21 # L0 hi add => carry - addq $10, $20, $10 # U0 hi mul + carry - ldq $4, 0($16) # L1 - - bis $31, $31, $31 # U1 mt - addq $5, $11, $23 # L0 lo + acc - addq $10, $21, $10 # L0 hi mul + carry - ldq $5, 8($16) # L1 - - umulh $19, $3, $8 # U1 - cmpult $23, $11, $20 # L0 lo add => carry - addq $23, $10, $23 # U0 hi add => answer - ldq $2, 16($17) # L1 - - mulq $19, $0, $9 # U1 - cmpult $23, $10, $21 # L0 hi add => carry - addq $12, $20, $12 # U0 hi mul + carry - ldq $3, 24($17) # L1 - - umulh $19, $0, $10 # U1 - addq $6, $13, $6 # L0 lo + acc - stq $22, -32($16) # L0 - stq $23, -24($16) # L1 - - bis $31, $31, $31 # L0 st slosh - mulq $19, $1, $11 # U1 - bis $31, $31, $31 # L1 st slosh - addq $12, $21, $12 # U0 hi mul + carry - - cmpult $6, $13, $20 # L0 lo add => carry - bis $31, $31, $31 # U1 mt - lda $18, -1($18) # L1 bookkeeping - addq $6, $12, $22 # U0 hi add => answer - - bis $31, $31, $31 # U1 mt - cmpult $22, $12, $21 # L0 hi add => carry - addq $14, $20, $14 # U0 hi mul + carry - ldq $6, 16($16) # L1 - - bis $31, $31, $31 # U1 mt - addq $7, $15, $23 # L0 lo + acc - addq $14, $21, $14 # U0 hi mul + carry - ldq $7, 24($16) # L1 - - umulh $19, $1, $12 # U1 - cmpult $23, $15, $20 # L0 lo add => carry - addq $23, $14, $23 # U0 hi add => answer - ldq $0, 32($17) # L1 - - mulq $19, $2, $13 # U1 - cmpult $23, $14, $21 # L0 hi add => carry - addq $8, $20, $8 # U0 hi mul + carry - ldq $1, 40($17) # L1 - - umulh $19, $2, $14 # U1 - addq $4, $9, $4 # U0 lo + acc - stq $22, -16($16) # L0 - stq $23, -8($16) # L1 - - bis $31, $31, $31 # L0 st slosh - mulq $19, $3, $15 # U1 - bis $31, $31, $31 # L1 st slosh - addq $8, $21, $8 # L0 hi mul + carry - - cmpult $4, $9, $20 # L0 lo add => carry - bis $31, $31, $31 # U1 mt - lda $17, 64($17) # L1 bookkeeping - addq $4, $8, $22 # U0 hi add => answer - - bis $31, $31, $31 # U1 mt - cmpult $22, $8, $21 # L0 hi add => carry - addq $10, $20, $10 # U0 hi mul + carry - ldq $4, 32($16) # L1 - - bis $31, $31, $31 # U1 mt - addq $5, $11, $23 # L0 lo + acc - addq $10, $21, $10 # L0 hi mul + carry - ldq $5, 40($16) # L1 - - umulh $19, $3, $8 # U1 - cmpult $23, $11, $20 # L0 lo add => carry - addq $23, $10, $23 # U0 hi add => answer - ldq $2, -16($17) # L1 - - mulq $19, $0, $9 # U1 - cmpult $23, $10, $21 # L0 hi add => carry - addq $12, $20, $12 # U0 hi mul + carry - ldq $3, -8($17) # L1 - - umulh $19, $0, $10 # U1 - addq $6, $13, $6 # L0 lo + acc - stq $22, 0($16) # L0 - stq $23, 8($16) # L1 - - bis $31, $31, $31 # L0 st slosh - mulq $19, $1, $11 # U1 - bis $31, $31, $31 # L1 st slosh - addq $12, $21, $12 # U0 hi mul + carry - - cmpult $6, $13, $20 # L0 lo add => carry - bis $31, $31, $31 # U1 mt - lda $16, 64($16) # L1 bookkeeping - addq $6, $12, $22 # U0 hi add => answer - - bis $31, $31, $31 # U1 mt - cmpult $22, $12, $21 # L0 hi add => carry - addq $14, $20, $14 # U0 hi mul + carry - ldq $6, -16($16) # L1 - - bis $31, $31, $31 # U1 mt - addq $7, $15, $23 # L0 lo + acc - addq $14, $21, $14 # U0 hi mul + carry - ldq $7, -8($16) # L1 - - umulh $19, $1, $12 # U1 - cmpult $23, $15, $20 # L0 lo add => carry - addq $23, $14, $23 # U0 hi add => answer - ldq $0, 0($17) # L1 - - mulq $19, $2, $13 # U1 - cmpult $23, $14, $21 # L0 hi add => carry - addq $8, $20, $8 # U0 hi mul + carry - ldq $1, 8($17) # L1 - - umulh $19, $2, $14 # U1 - addq $4, $9, $4 # L0 lo + acc - stq $22, -48($16) # L0 - stq $23, -40($16) # L1 - - bis $31, $31, $31 # L0 st slosh - mulq $19, $3, $15 # U1 - bis $31, $31, $31 # L1 st slosh - addq $8, $21, $8 # U0 hi mul + carry - - cmpult $4, $9, $20 # L0 lo add => carry - addq $4, $8, $22 # U0 hi add => answer - bis $31, $31, $31 # L1 mt - bgt $18, $Loop # U1 bookkeeping - -# ____ UNROLLED LOOP SOFTWARE PIPELINE FINISH ____ -$Lend: - cmpult $22, $8, $21 # L0 hi add => carry - addq $10, $20, $10 # U0 hi mul + carry - ldq $4, 0($16) # L1 - addq $5, $11, $23 # L0 lo + acc - addq $10, $21, $10 # L0 hi mul + carry - ldq $5, 8($16) # L1 - umulh $19, $3, $8 # U1 - cmpult $23, $11, $20 # L0 lo add => carry - addq $23, $10, $23 # U0 hi add => answer - mulq $19, $0, $9 # U1 - cmpult $23, $10, $21 # L0 hi add => carry - addq $12, $20, $12 # U0 hi mul + carry - umulh $19, $0, $10 # U1 - addq $6, $13, $6 # L0 lo + acc - stq $22, -32($16) # L0 - stq $23, -24($16) # L1 - mulq $19, $1, $11 # U1 - addq $12, $21, $12 # U0 hi mul + carry - cmpult $6, $13, $20 # L0 lo add => carry - addq $6, $12, $22 # U0 hi add => answer - cmpult $22, $12, $21 # L0 hi add => carry - addq $14, $20, $14 # U0 hi mul + carry - addq $7, $15, $23 # L0 lo + acc - addq $14, $21, $14 # U0 hi mul + carry - umulh $19, $1, $12 # U1 - cmpult $23, $15, $20 # L0 lo add => carry - addq $23, $14, $23 # U0 hi add => answer - cmpult $23, $14, $21 # L0 hi add => carry - addq $8, $20, $8 # U0 hi mul + carry - addq $4, $9, $4 # U0 lo + acc - stq $22, -16($16) # L0 - stq $23, -8($16) # L1 - bis $31, $31, $31 # L0 st slosh - addq $8, $21, $8 # L0 hi mul + carry - cmpult $4, $9, $20 # L0 lo add => carry - addq $4, $8, $22 # U0 hi add => answer - cmpult $22, $8, $21 # L0 hi add => carry - addq $10, $20, $10 # U0 hi mul + carry - addq $5, $11, $23 # L0 lo + acc - addq $10, $21, $10 # L0 hi mul + carry - cmpult $23, $11, $20 # L0 lo add => carry - addq $23, $10, $23 # U0 hi add => answer - cmpult $23, $10, $21 # L0 hi add => carry - addq $12, $20, $12 # U0 hi mul + carry - stq $22, 0($16) # L0 - stq $23, 8($16) # L1 - addq $12, $21, $0 # U0 hi mul + carry - - ldq $9, 8($30) - ldq $10, 16($30) - ldq $11, 24($30) - ldq $12, 32($30) - ldq $13, 40($30) - ldq $14, 48($30) - ldq $15, 56($30) - lda $30, 240($30) - ret $31, ($26), 1 - - .end __mpn_addmul_1 diff --git a/sysdeps/alpha/alphaev6/fpu/e_sqrt.S b/sysdeps/alpha/alphaev6/fpu/e_sqrt.S deleted file mode 100644 index 64a08826f6..0000000000 --- a/sysdeps/alpha/alphaev6/fpu/e_sqrt.S +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2000 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> - - .arch ev6 - .set noreorder - .set noat - -ENTRY(__ieee754_sqrt) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - .align 4 -#ifdef _IEEE_FP_INEXACT - sqrtt/sui $f16, $f0 -#else - sqrtt/su $f16, $f0 -#endif - ret - nop - nop - -END(__ieee754_sqrt) diff --git a/sysdeps/alpha/alphaev6/fpu/e_sqrtf.S b/sysdeps/alpha/alphaev6/fpu/e_sqrtf.S deleted file mode 100644 index 3500e832c1..0000000000 --- a/sysdeps/alpha/alphaev6/fpu/e_sqrtf.S +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2000 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> - - .arch ev6 - .set noreorder - .set noat - -ENTRY(__ieee754_sqrtf) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - .align 4 -#ifdef _IEEE_FP_INEXACT - sqrts/sui $f16, $f0 -#else - sqrts/su $f16, $f0 -#endif - ret - nop - nop - -END(__ieee754_sqrtf) diff --git a/sysdeps/alpha/alphaev6/memchr.S b/sysdeps/alpha/alphaev6/memchr.S deleted file mode 100644 index 88e91fa988..0000000000 --- a/sysdeps/alpha/alphaev6/memchr.S +++ /dev/null @@ -1,193 +0,0 @@ -/* Copyright (C) 2000, 2003 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger (davidm@cs.arizona.edu). - EV6 optimized by Rick Gorton <rick.gorton@alpha-processor.com>. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> - - .arch ev6 - .set noreorder - .set noat - -ENTRY(__memchr) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - # Hack -- if someone passes in (size_t)-1, hoping to just - # search til the end of the address space, we will overflow - # below when we find the address of the last byte. Given - # that we will never have a 56-bit address space, cropping - # the length is the easiest way to avoid trouble. - zap $18, 0x80, $5 # U : Bound length - beq $18, $not_found # U : - ldq_u $1, 0($16) # L : load first quadword Latency=3 - and $17, 0xff, $17 # E : L L U U : 00000000000000ch - - insbl $17, 1, $2 # U : 000000000000ch00 - cmpult $18, 9, $4 # E : small (< 1 quad) string? - or $2, $17, $17 # E : 000000000000chch - lda $3, -1($31) # E : U L L U - - sll $17, 16, $2 # U : 00000000chch0000 - addq $16, $5, $5 # E : Max search address - or $2, $17, $17 # E : 00000000chchchch - sll $17, 32, $2 # U : U L L U : chchchch00000000 - - or $2, $17, $17 # E : chchchchchchchch - extql $1, $16, $7 # U : $7 is upper bits - beq $4, $first_quad # U : - ldq_u $6, -1($5) # L : L U U L : eight or less bytes to search Latency=3 - - extqh $6, $16, $6 # U : 2 cycle stall for $6 - mov $16, $0 # E : - nop # E : - or $7, $6, $1 # E : L U L U $1 = quadword starting at $16 - - # Deal with the case where at most 8 bytes remain to be searched - # in $1. E.g.: - # $18 = 6 - # $1 = ????c6c5c4c3c2c1 -$last_quad: - negq $18, $6 # E : - xor $17, $1, $1 # E : - srl $3, $6, $6 # U : $6 = mask of $18 bits set - cmpbge $31, $1, $2 # E : L U L U - - nop - nop - and $2, $6, $2 # E : - beq $2, $not_found # U : U L U L - -$found_it: -#if defined(__alpha_fix__) && defined(__alpha_cix__) - /* - * Since we are guaranteed to have set one of the bits, we don't - * have to worry about coming back with a 0x40 out of cttz... - */ - cttz $2, $3 # U0 : - addq $0, $3, $0 # E : All done - nop # E : - ret # L0 : L U L U -#else - /* - * Slow and clunky. It can probably be improved. - * An exercise left for others. - */ - negq $2, $3 # E : - and $2, $3, $2 # E : - and $2, 0x0f, $1 # E : - addq $0, 4, $3 # E : - - cmoveq $1, $3, $0 # E : Latency 2, extra map cycle - nop # E : keep with cmov - and $2, 0x33, $1 # E : - addq $0, 2, $3 # E : U L U L : 2 cycle stall on $0 - - cmoveq $1, $3, $0 # E : Latency 2, extra map cycle - nop # E : keep with cmov - and $2, 0x55, $1 # E : - addq $0, 1, $3 # E : U L U L : 2 cycle stall on $0 - - cmoveq $1, $3, $0 # E : Latency 2, extra map cycle - nop - nop - ret # L0 : L U L U -#endif - - # Deal with the case where $18 > 8 bytes remain to be - # searched. $16 may not be aligned. - .align 4 -$first_quad: - andnot $16, 0x7, $0 # E : - insqh $3, $16, $2 # U : $2 = 0000ffffffffffff ($16<0:2> ff) - xor $1, $17, $1 # E : - or $1, $2, $1 # E : U L U L $1 = ====ffffffffffff - - cmpbge $31, $1, $2 # E : - bne $2, $found_it # U : - # At least one byte left to process. - ldq $1, 8($0) # L : - subq $5, 1, $18 # E : U L U L - - addq $0, 8, $0 # E : - # Make $18 point to last quad to be accessed (the - # last quad may or may not be partial). - andnot $18, 0x7, $18 # E : - cmpult $0, $18, $2 # E : - beq $2, $final # U : U L U L - - # At least two quads remain to be accessed. - - subq $18, $0, $4 # E : $4 <- nr quads to be processed - and $4, 8, $4 # E : odd number of quads? - bne $4, $odd_quad_count # U : - # At least three quads remain to be accessed - mov $1, $4 # E : L U L U : move prefetched value to correct reg - - .align 4 -$unrolled_loop: - ldq $1, 8($0) # L : prefetch $1 - xor $17, $4, $2 # E : - cmpbge $31, $2, $2 # E : - bne $2, $found_it # U : U L U L - - addq $0, 8, $0 # E : - nop # E : - nop # E : - nop # E : - -$odd_quad_count: - xor $17, $1, $2 # E : - ldq $4, 8($0) # L : prefetch $4 - cmpbge $31, $2, $2 # E : - addq $0, 8, $6 # E : - - bne $2, $found_it # U : - cmpult $6, $18, $6 # E : - addq $0, 8, $0 # E : - nop # E : - - bne $6, $unrolled_loop # U : - mov $4, $1 # E : move prefetched value into $1 - nop # E : - nop # E : - -$final: subq $5, $0, $18 # E : $18 <- number of bytes left to do - nop # E : - nop # E : - bne $18, $last_quad # U : - -$not_found: - mov $31, $0 # E : - nop # E : - nop # E : - ret # L0 : - - END(__memchr) - -weak_alias (__memchr, memchr) -#if !__BOUNDED_POINTERS__ -weak_alias (__memchr, __ubp_memchr) -#endif -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/alpha/alphaev6/memcpy.S b/sysdeps/alpha/alphaev6/memcpy.S deleted file mode 100644 index 7cff521da2..0000000000 --- a/sysdeps/alpha/alphaev6/memcpy.S +++ /dev/null @@ -1,256 +0,0 @@ -/* Copyright (C) 2000, 2003 Free Software Foundation, Inc. - This file is part of the GNU C Library. - EV6 optimized by Rick Gorton <rick.gorton@alpha-processor.com>. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* - * Much of the information about 21264 scheduling/coding comes from: - * Compiler Writer's Guide for the Alpha 21264 - * abbreviated as 'CWG' in other comments here - * ftp.digital.com/pub/Digital/info/semiconductor/literature/dsc-library.html - * Scheduling notation: - * E - either cluster - * U - upper subcluster; U0 - subcluster U0; U1 - subcluster U1 - * L - lower subcluster; L0 - subcluster L0; L1 - subcluster L1 - * - * Temp usage notes: - * $0 - destination address - * $1,$2, - scratch - */ - -#include <sysdep.h> - - .arch ev6 - .set noreorder - .set noat - -ENTRY(memcpy) - .prologue 0 - - mov $16, $0 # E : copy dest to return - ble $18, $nomoredata # U : done with the copy? - xor $16, $17, $1 # E : are source and dest alignments the same? - and $1, 7, $1 # E : are they the same mod 8? - - bne $1, $misaligned # U : Nope - gotta do this the slow way - /* source and dest are same mod 8 address */ - and $16, 7, $1 # E : Are both 0mod8? - beq $1, $both_0mod8 # U : Yes - nop # E : - - /* - * source and dest are same misalignment. move a byte at a time - * until a 0mod8 alignment for both is reached. - * At least one byte more to move - */ - -$head_align: - ldbu $1, 0($17) # L : grab a byte - subq $18, 1, $18 # E : count-- - addq $17, 1, $17 # E : src++ - stb $1, 0($16) # L : - addq $16, 1, $16 # E : dest++ - and $16, 7, $1 # E : Are we at 0mod8 yet? - ble $18, $nomoredata # U : done with the copy? - bne $1, $head_align # U : - -$both_0mod8: - cmple $18, 127, $1 # E : Can we unroll the loop? - bne $1, $no_unroll # U : - and $16, 63, $1 # E : get mod64 alignment - beq $1, $do_unroll # U : no single quads to fiddle - -$single_head_quad: - ldq $1, 0($17) # L : get 8 bytes - subq $18, 8, $18 # E : count -= 8 - addq $17, 8, $17 # E : src += 8 - nop # E : - - stq $1, 0($16) # L : store - addq $16, 8, $16 # E : dest += 8 - and $16, 63, $1 # E : get mod64 alignment - bne $1, $single_head_quad # U : still not fully aligned - -$do_unroll: - addq $16, 64, $7 # E : Initial (+1 trip) wh64 address - cmple $18, 127, $1 # E : Can we go through the unrolled loop? - bne $1, $tail_quads # U : Nope - nop # E : - -$unroll_body: - wh64 ($7) # L1 : memory subsystem hint: 64 bytes at - # ($7) are about to be over-written - ldq $6, 0($17) # L0 : bytes 0..7 - nop # E : - nop # E : - - ldq $4, 8($17) # L : bytes 8..15 - ldq $5, 16($17) # L : bytes 16..23 - addq $7, 64, $7 # E : Update next wh64 address - nop # E : - - ldq $3, 24($17) # L : bytes 24..31 - addq $16, 64, $1 # E : fallback value for wh64 - nop # E : - nop # E : - - addq $17, 32, $17 # E : src += 32 bytes - stq $6, 0($16) # L : bytes 0..7 - nop # E : - nop # E : - - stq $4, 8($16) # L : bytes 8..15 - stq $5, 16($16) # L : bytes 16..23 - subq $18, 192, $2 # E : At least two more trips to go? - nop # E : - - stq $3, 24($16) # L : bytes 24..31 - addq $16, 32, $16 # E : dest += 32 bytes - nop # E : - nop # E : - - ldq $6, 0($17) # L : bytes 0..7 - ldq $4, 8($17) # L : bytes 8..15 - cmovlt $2, $1, $7 # E : Latency 2, extra map slot - Use - # fallback wh64 address if < 2 more trips - nop # E : - - ldq $5, 16($17) # L : bytes 16..23 - ldq $3, 24($17) # L : bytes 24..31 - addq $16, 32, $16 # E : dest += 32 - subq $18, 64, $18 # E : count -= 64 - - addq $17, 32, $17 # E : src += 32 - stq $6, -32($16) # L : bytes 0..7 - stq $4, -24($16) # L : bytes 8..15 - cmple $18, 63, $1 # E : At least one more trip? - - stq $5, -16($16) # L : bytes 16..23 - stq $3, -8($16) # L : bytes 24..31 - nop # E : - beq $1, $unroll_body - -$tail_quads: -$no_unroll: - .align 4 - subq $18, 8, $18 # E : At least a quad left? - blt $18, $less_than_8 # U : Nope - nop # E : - nop # E : - -$move_a_quad: - ldq $1, 0($17) # L : fetch 8 - subq $18, 8, $18 # E : count -= 8 - addq $17, 8, $17 # E : src += 8 - nop # E : - - stq $1, 0($16) # L : store 8 - addq $16, 8, $16 # E : dest += 8 - bge $18, $move_a_quad # U : - nop # E : - -$less_than_8: - .align 4 - addq $18, 8, $18 # E : add back for trailing bytes - ble $18, $nomoredata # U : All-done - nop # E : - nop # E : - - /* Trailing bytes */ -$tail_bytes: - subq $18, 1, $18 # E : count-- - ldbu $1, 0($17) # L : fetch a byte - addq $17, 1, $17 # E : src++ - nop # E : - - stb $1, 0($16) # L : store a byte - addq $16, 1, $16 # E : dest++ - bgt $18, $tail_bytes # U : more to be done? - nop # E : - - /* branching to exit takes 3 extra cycles, so replicate exit here */ - ret $31, ($26), 1 # L0 : - nop # E : - nop # E : - nop # E : - -$misaligned: - mov $0, $4 # E : dest temp - and $0, 7, $1 # E : dest alignment mod8 - beq $1, $dest_0mod8 # U : life doesnt totally suck - nop - -$aligndest: - ble $18, $nomoredata # U : - ldbu $1, 0($17) # L : fetch a byte - subq $18, 1, $18 # E : count-- - addq $17, 1, $17 # E : src++ - - stb $1, 0($4) # L : store it - addq $4, 1, $4 # E : dest++ - and $4, 7, $1 # E : dest 0mod8 yet? - bne $1, $aligndest # U : go until we are aligned. - - /* Source has unknown alignment, but dest is known to be 0mod8 */ -$dest_0mod8: - subq $18, 8, $18 # E : At least a quad left? - blt $18, $misalign_tail # U : Nope - ldq_u $3, 0($17) # L : seed (rotating load) of 8 bytes - nop # E : - -$mis_quad: - ldq_u $16, 8($17) # L : Fetch next 8 - extql $3, $17, $3 # U : masking - extqh $16, $17, $1 # U : masking - bis $3, $1, $1 # E : merged bytes to store - - subq $18, 8, $18 # E : count -= 8 - addq $17, 8, $17 # E : src += 8 - stq $1, 0($4) # L : store 8 (aligned) - mov $16, $3 # E : "rotate" source data - - addq $4, 8, $4 # E : dest += 8 - bge $18, $mis_quad # U : More quads to move - nop - nop - -$misalign_tail: - addq $18, 8, $18 # E : account for tail stuff - ble $18, $nomoredata # U : - nop - nop - -$misalign_byte: - ldbu $1, 0($17) # L : fetch 1 - subq $18, 1, $18 # E : count-- - addq $17, 1, $17 # E : src++ - nop # E : - - stb $1, 0($4) # L : store - addq $4, 1, $4 # E : dest++ - bgt $18, $misalign_byte # U : more to go? - nop - - -$nomoredata: - ret $31, ($26), 1 # L0 : - nop # E : - nop # E : - nop # E : - -END(memcpy) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/alpha/alphaev6/memset.S b/sysdeps/alpha/alphaev6/memset.S deleted file mode 100644 index 3b3c4ba061..0000000000 --- a/sysdeps/alpha/alphaev6/memset.S +++ /dev/null @@ -1,224 +0,0 @@ -/* Copyright (C) 2000, 2003 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - EV6 optimized by Rick Gorton <rick.gorton@alpha-processor.com>. - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> - - .arch ev6 - .set noat - .set noreorder - -ENTRY(memset) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - /* - * Serious stalling happens. The only way to mitigate this is to - * undertake a major re-write to interleave the constant materialization - * with other parts of the fall-through code. This is important, even - * though it makes maintenance tougher. - * Do this later. - */ - and $17, 255, $1 # E : 00000000000000ch - insbl $17, 1, $2 # U : 000000000000ch00 - mov $16, $0 # E : return value - ble $18, $end # U : zero length requested? - - addq $18, $16, $6 # E : max address to write to - or $1, $2, $17 # E : 000000000000chch - insbl $1, 2, $3 # U : 0000000000ch0000 - insbl $1, 3, $4 # U : 00000000ch000000 - - or $3, $4, $3 # E : 00000000chch0000 - inswl $17, 4, $5 # U : 0000chch00000000 - xor $16, $6, $1 # E : will complete write be within one quadword? - inswl $17, 6, $2 # U : chch000000000000 - - or $17, $3, $17 # E : 00000000chchchch - or $2, $5, $2 # E : chchchch00000000 - bic $1, 7, $1 # E : fit within a single quadword? - and $16, 7, $3 # E : Target addr misalignment - - or $17, $2, $17 # E : chchchchchchchch - beq $1, $within_quad # U : - nop # E : - beq $3, $aligned # U : target is 0mod8 - - /* - * Target address is misaligned, and won't fit within a quadword. - */ - ldq_u $4, 0($16) # L : Fetch first partial - mov $16, $5 # E : Save the address - insql $17, $16, $2 # U : Insert new bytes - subq $3, 8, $3 # E : Invert (for addressing uses) - - addq $18, $3, $18 # E : $18 is new count ($3 is negative) - mskql $4, $16, $4 # U : clear relevant parts of the quad - subq $16, $3, $16 # E : $16 is new aligned destination - or $2, $4, $1 # E : Final bytes - - nop - stq_u $1,0($5) # L : Store result - nop - nop - - .align 4 -$aligned: - /* - * We are now guaranteed to be quad aligned, with at least - * one partial quad to write. - */ - - sra $18, 3, $3 # U : Number of remaining quads to write - and $18, 7, $18 # E : Number of trailing bytes to write - mov $16, $5 # E : Save dest address - beq $3, $no_quad # U : tail stuff only - - /* - * It's worth the effort to unroll this and use wh64 if possible. - * At this point, entry values are: - * $16 Current destination address - * $5 A copy of $16 - * $6 The max quadword address to write to - * $18 Number trailer bytes - * $3 Number quads to write - */ - - and $16, 0x3f, $2 # E : Forward work (only useful for unrolled loop) - subq $3, 16, $4 # E : Only try to unroll if > 128 bytes - subq $2, 0x40, $1 # E : bias counter (aligning stuff 0mod64) - blt $4, $loop # U : - - /* - * We know we've got at least 16 quads, minimum of one trip - * through unrolled loop. Do a quad at a time to get us 0mod64 - * aligned. - */ - - nop # E : - nop # E : - nop # E : - beq $1, $bigalign # U : - -$alignmod64: - stq $17, 0($5) # L : - subq $3, 1, $3 # E : For consistency later - addq $1, 8, $1 # E : Increment towards zero for alignment - addq $5, 8, $4 # E : Initial wh64 address (filler instruction) - - nop - nop - addq $5, 8, $5 # E : Inc address - blt $1, $alignmod64 # U : - -$bigalign: - /* - * $3 - number quads left to go - * $5 - target address (aligned 0mod64) - * $17 - mask of stuff to store - * Scratch registers available: $7, $2, $4, $1 - * We know that we'll be taking a minimum of one trip through. - * CWG Section 3.7.6: do not expect a sustained store rate of > 1/cycle - * Assumes the wh64 needs to be for 2 trips through the loop in the future. - * The wh64 is issued on for the starting destination address for trip +2 - * through the loop, and if there are less than two trips left, the target - * address will be for the current trip. - */ - -$do_wh64: - wh64 ($4) # L1 : memory subsystem write hint - subq $3, 24, $2 # E : For determining future wh64 addresses - stq $17, 0($5) # L : - nop # E : - - addq $5, 128, $4 # E : speculative target of next wh64 - stq $17, 8($5) # L : - stq $17, 16($5) # L : - addq $5, 64, $7 # E : Fallback address for wh64 (== next trip addr) - - stq $17, 24($5) # L : - stq $17, 32($5) # L : - cmovlt $2, $7, $4 # E : Latency 2, extra mapping cycle - nop - - stq $17, 40($5) # L : - stq $17, 48($5) # L : - subq $3, 16, $2 # E : Repeat the loop at least once more? - nop - - stq $17, 56($5) # L : - addq $5, 64, $5 # E : - subq $3, 8, $3 # E : - bge $2, $do_wh64 # U : - - nop - nop - nop - beq $3, $no_quad # U : Might have finished already - - .align 4 - /* - * Simple loop for trailing quadwords, or for small amounts - * of data (where we can't use an unrolled loop and wh64) - */ -$loop: - stq $17, 0($5) # L : - subq $3, 1, $3 # E : Decrement number quads left - addq $5, 8, $5 # E : Inc address - bne $3, $loop # U : more? - -$no_quad: - /* - * Write 0..7 trailing bytes. - */ - nop # E : - beq $18, $end # U : All done? - ldq $7, 0($5) # L : - mskqh $7, $6, $2 # U : Mask final quad - - insqh $17, $6, $4 # U : New bits - or $2, $4, $1 # E : Put it all together - stq $1, 0($5) # L : And back to memory - ret $31,($26),1 # L0 : - -$within_quad: - ldq_u $1, 0($16) # L : - insql $17, $16, $2 # U : New bits - mskql $1, $16, $4 # U : Clear old - or $2, $4, $2 # E : New result - - mskql $2, $6, $4 # U : - mskqh $1, $6, $2 # U : - or $2, $4, $1 # E : - stq_u $1, 0($16) # L : - -$end: - nop - nop - nop - ret $31,($26),1 # L0 : - - END(memset) -libc_hidden_builtin_def (memset) diff --git a/sysdeps/alpha/alphaev6/stxcpy.S b/sysdeps/alpha/alphaev6/stxcpy.S deleted file mode 100644 index 3c3e7d72bf..0000000000 --- a/sysdeps/alpha/alphaev6/stxcpy.S +++ /dev/null @@ -1,328 +0,0 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - EV6 optimized by Rick Gorton <rick.gorton@alpha-processor.com>. - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Copy a null-terminated string from SRC to DST. - - This is an internal routine used by strcpy, stpcpy, and strcat. - As such, it uses special linkage conventions to make implementation - of these public functions more efficient. - - On input: - t9 = return address - a0 = DST - a1 = SRC - - On output: - t8 = bitmask (with one bit set) indicating the last byte written - a0 = unaligned address of the last *word* written - - Furthermore, v0, a3-a5, t11, and t12 are untouched. -*/ - - -#include <sysdep.h> - - .arch ev6 - .set noat - .set noreorder - .text - -/* There is a problem with either gdb (as of 4.16) or gas (as of 2.7) that - doesn't like putting the entry point for a procedure somewhere in the - middle of the procedure descriptor. Work around this by putting the - aligned copy in its own procedure descriptor */ - - - .ent stxcpy_aligned - .align 4 -stxcpy_aligned: - .frame sp, 0, t9 - .prologue 0 - - /* On entry to this basic block: - t0 == the first destination word for masking back in - t1 == the first source word. */ - - /* Create the 1st output word and detect 0's in the 1st input word. */ - lda t2, -1 # E : build a mask against false zero - mskqh t2, a1, t2 # U : detection in the src word (stall) - mskqh t1, a1, t3 # U : - ornot t1, t2, t2 # E : (stall) - - mskql t0, a1, t0 # U : assemble the first output word - cmpbge zero, t2, t10 # E : bits set iff null found - or t0, t3, t1 # E : (stall) - bne t10, $a_eos # U : (stall) - - /* On entry to this basic block: - t0 == the first destination word for masking back in - t1 == a source word not containing a null. */ - /* Nops here to separate store quads from load quads */ - -$a_loop: - stq_u t1, 0(a0) # L : - addq a0, 8, a0 # E : - nop - nop - - ldq_u t1, 0(a1) # L : Latency=3 - addq a1, 8, a1 # E : - cmpbge zero, t1, t10 # E : (3 cycle stall) - beq t10, $a_loop # U : (stall for t10) - - /* Take care of the final (partial) word store. - On entry to this basic block we have: - t1 == the source word containing the null - t10 == the cmpbge mask that found it. */ -$a_eos: - negq t10, t6 # E : find low bit set - and t10, t6, t8 # E : (stall) - /* For the sake of the cache, don't read a destination word - if we're not going to need it. */ - and t8, 0x80, t6 # E : (stall) - bne t6, 1f # U : (stall) - - /* We're doing a partial word store and so need to combine - our source and original destination words. */ - ldq_u t0, 0(a0) # L : Latency=3 - subq t8, 1, t6 # E : - zapnot t1, t6, t1 # U : clear src bytes >= null (stall) - or t8, t6, t10 # E : (stall) - - zap t0, t10, t0 # E : clear dst bytes <= null - or t0, t1, t1 # E : (stall) - nop - nop - -1: stq_u t1, 0(a0) # L : - ret (t9) # L0 : Latency=3 - nop - nop - - .end stxcpy_aligned - - .align 4 - .ent __stxcpy - .globl __stxcpy -__stxcpy: - .frame sp, 0, t9 - .prologue 0 - - /* Are source and destination co-aligned? */ - xor a0, a1, t0 # E : - unop # E : - and t0, 7, t0 # E : (stall) - bne t0, $unaligned # U : (stall) - - /* We are co-aligned; take care of a partial first word. */ - ldq_u t1, 0(a1) # L : load first src word - and a0, 7, t0 # E : take care not to load a word ... - addq a1, 8, a1 # E : - beq t0, stxcpy_aligned # U : ... if we wont need it (stall) - - ldq_u t0, 0(a0) # L : - br stxcpy_aligned # L0 : Latency=3 - nop - nop - - -/* The source and destination are not co-aligned. Align the destination - and cope. We have to be very careful about not reading too much and - causing a SEGV. */ - - .align 4 -$u_head: - /* We know just enough now to be able to assemble the first - full source word. We can still find a zero at the end of it - that prevents us from outputting the whole thing. - - On entry to this basic block: - t0 == the first dest word, for masking back in, if needed else 0 - t1 == the low bits of the first source word - t6 == bytemask that is -1 in dest word bytes */ - - ldq_u t2, 8(a1) # L : - addq a1, 8, a1 # E : - extql t1, a1, t1 # U : (stall on a1) - extqh t2, a1, t4 # U : (stall on a1) - - mskql t0, a0, t0 # U : - or t1, t4, t1 # E : - mskqh t1, a0, t1 # U : (stall on t1) - or t0, t1, t1 # E : (stall on t1) - - or t1, t6, t6 # E : - cmpbge zero, t6, t10 # E : (stall) - lda t6, -1 # E : for masking just below - bne t10, $u_final # U : (stall) - - mskql t6, a1, t6 # U : mask out the bits we have - or t6, t2, t2 # E : already extracted before (stall) - cmpbge zero, t2, t10 # E : testing eos (stall) - bne t10, $u_late_head_exit # U : (stall) - - /* Finally, we've got all the stupid leading edge cases taken care - of and we can set up to enter the main loop. */ - - stq_u t1, 0(a0) # L : store first output word - addq a0, 8, a0 # E : - extql t2, a1, t0 # U : position ho-bits of lo word - ldq_u t2, 8(a1) # U : read next high-order source word - - addq a1, 8, a1 # E : - cmpbge zero, t2, t10 # E : (stall for t2) - nop # E : - bne t10, $u_eos # U : (stall) - - /* Unaligned copy main loop. In order to avoid reading too much, - the loop is structured to detect zeros in aligned source words. - This has, unfortunately, effectively pulled half of a loop - iteration out into the head and half into the tail, but it does - prevent nastiness from accumulating in the very thing we want - to run as fast as possible. - - On entry to this basic block: - t0 == the shifted high-order bits from the previous source word - t2 == the unshifted current source word - - We further know that t2 does not contain a null terminator. */ - - .align 3 -$u_loop: - extqh t2, a1, t1 # U : extract high bits for current word - addq a1, 8, a1 # E : (stall) - extql t2, a1, t3 # U : extract low bits for next time (stall) - addq a0, 8, a0 # E : - - or t0, t1, t1 # E : current dst word now complete - ldq_u t2, 0(a1) # L : Latency=3 load high word for next time - stq_u t1, -8(a0) # L : save the current word (stall) - mov t3, t0 # E : - - cmpbge zero, t2, t10 # E : test new word for eos - beq t10, $u_loop # U : (stall) - nop - nop - - /* We've found a zero somewhere in the source word we just read. - If it resides in the lower half, we have one (probably partial) - word to write out, and if it resides in the upper half, we - have one full and one partial word left to write out. - - On entry to this basic block: - t0 == the shifted high-order bits from the previous source word - t2 == the unshifted current source word. */ -$u_eos: - extqh t2, a1, t1 # U : - or t0, t1, t1 # E : first (partial) source word complete (stall) - cmpbge zero, t1, t10 # E : is the null in this first bit? (stall) - bne t10, $u_final # U : (stall) - -$u_late_head_exit: - stq_u t1, 0(a0) # L : the null was in the high-order bits - addq a0, 8, a0 # E : - extql t2, a1, t1 # U : - cmpbge zero, t1, t10 # E : (stall) - - /* Take care of a final (probably partial) result word. - On entry to this basic block: - t1 == assembled source word - t10 == cmpbge mask that found the null. */ -$u_final: - negq t10, t6 # E : isolate low bit set - and t6, t10, t8 # E : (stall) - and t8, 0x80, t6 # E : avoid dest word load if we can (stall) - bne t6, 1f # U : (stall) - - ldq_u t0, 0(a0) # E : - subq t8, 1, t6 # E : - or t6, t8, t10 # E : (stall) - zapnot t1, t6, t1 # U : kill source bytes >= null (stall) - - zap t0, t10, t0 # U : kill dest bytes <= null (2 cycle data stall) - or t0, t1, t1 # E : (stall) - nop - nop - -1: stq_u t1, 0(a0) # L : - ret (t9) # L0 : Latency=3 - nop - nop - - /* Unaligned copy entry point. */ - .align 4 -$unaligned: - - ldq_u t1, 0(a1) # L : load first source word - and a0, 7, t4 # E : find dest misalignment - and a1, 7, t5 # E : find src misalignment - /* Conditionally load the first destination word and a bytemask - with 0xff indicating that the destination byte is sacrosanct. */ - mov zero, t0 # E : - - mov zero, t6 # E : - beq t4, 1f # U : - ldq_u t0, 0(a0) # L : - lda t6, -1 # E : - - mskql t6, a0, t6 # U : - nop - nop - nop -1: - subq a1, t4, a1 # E : sub dest misalignment from src addr - /* If source misalignment is larger than dest misalignment, we need - extra startup checks to avoid SEGV. */ - cmplt t4, t5, t8 # E : - beq t8, $u_head # U : - lda t2, -1 # E : mask out leading garbage in source - - mskqh t2, t5, t2 # U : - ornot t1, t2, t3 # E : (stall) - cmpbge zero, t3, t10 # E : is there a zero? (stall) - beq t10, $u_head # U : (stall) - - /* At this point we've found a zero in the first partial word of - the source. We need to isolate the valid source data and mask - it into the original destination data. (Incidentally, we know - that we'll need at least one byte of that original dest word.) */ - - ldq_u t0, 0(a0) # L : - negq t10, t6 # E : build bitmask of bytes <= zero - and t6, t10, t8 # E : (stall) - and a1, 7, t5 # E : - - subq t8, 1, t6 # E : - or t6, t8, t10 # E : (stall) - srl t8, t5, t8 # U : adjust final null return value - zapnot t2, t10, t2 # U : prepare source word; mirror changes (stall) - - and t1, t2, t1 # E : to source validity mask - extql t2, a1, t2 # U : - extql t1, a1, t1 # U : (stall) - andnot t0, t2, t0 # .. e1 : zero place for source to reside (stall) - - or t0, t1, t1 # e1 : and put it there - stq_u t1, 0(a0) # .. e0 : (stall) - ret (t9) # e1 : - nop - - .end __stxcpy - diff --git a/sysdeps/alpha/alphaev6/stxncpy.S b/sysdeps/alpha/alphaev6/stxncpy.S deleted file mode 100644 index f39c23a886..0000000000 --- a/sysdeps/alpha/alphaev6/stxncpy.S +++ /dev/null @@ -1,403 +0,0 @@ -/* Copyright (C) 2000, 2002 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - EV6 optimized by Rick Gorton <rick.gorton@alpha-processor.com>. - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Copy no more than COUNT bytes of the null-terminated string from - SRC to DST. - - This is an internal routine used by strncpy, stpncpy, and strncat. - As such, it uses special linkage conventions to make implementation - of these public functions more efficient. - - On input: - t9 = return address - a0 = DST - a1 = SRC - a2 = COUNT - - Furthermore, COUNT may not be zero. - - On output: - t0 = last word written - t8 = bitmask (with one bit set) indicating the last byte written - t10 = bitmask (with one bit set) indicating the byte position of - the end of the range specified by COUNT - a0 = unaligned address of the last *word* written - a2 = the number of full words left in COUNT - - Furthermore, v0, a3-a5, t11, and t12 are untouched. -*/ - -#include <sysdep.h> - - .arch ev6 - .set noat - .set noreorder - -/* There is a problem with either gdb (as of 4.16) or gas (as of 2.7) that - doesn't like putting the entry point for a procedure somewhere in the - middle of the procedure descriptor. Work around this by putting the - aligned copy in its own procedure descriptor */ - - - .ent stxncpy_aligned - .align 4 -stxncpy_aligned: - .frame sp, 0, t9, 0 - .prologue 0 - - /* On entry to this basic block: - t0 == the first destination word for masking back in - t1 == the first source word. */ - - /* Create the 1st output word and detect 0's in the 1st input word. */ - lda t2, -1 # E : build a mask against false zero - mskqh t2, a1, t2 # U : detection in the src word (stall) - mskqh t1, a1, t3 # U : - ornot t1, t2, t2 # E : (stall) - - mskql t0, a1, t0 # U : assemble the first output word - cmpbge zero, t2, t7 # E : bits set iff null found - or t0, t3, t0 # E : (stall) - beq a2, $a_eoc # U : - - bne t7, $a_eos # U : - nop - nop - nop - - /* On entry to this basic block: - t0 == a source word not containing a null. */ - - /* - * nops here to: - * separate store quads from load quads - * limit of 1 bcond/quad to permit training - */ -$a_loop: - stq_u t0, 0(a0) # L : - addq a0, 8, a0 # E : - subq a2, 1, a2 # E : - nop - - ldq_u t0, 0(a1) # L : - addq a1, 8, a1 # E : - cmpbge zero, t0, t7 # E : - beq a2, $a_eoc # U : - - beq t7, $a_loop # U : - nop - nop - nop - - /* Take care of the final (partial) word store. At this point - the end-of-count bit is set in t7 iff it applies. - - On entry to this basic block we have: - t0 == the source word containing the null - t7 == the cmpbge mask that found it. */ - -$a_eos: - negq t7, t8 # E : find low bit set - and t7, t8, t8 # E : (stall) - /* For the sake of the cache, don't read a destination word - if we're not going to need it. */ - and t8, 0x80, t6 # E : (stall) - bne t6, 1f # U : (stall) - - /* We're doing a partial word store and so need to combine - our source and original destination words. */ - ldq_u t1, 0(a0) # L : - subq t8, 1, t6 # E : - or t8, t6, t7 # E : (stall) - zapnot t0, t7, t0 # U : clear src bytes > null (stall) - - zap t1, t7, t1 # .. e1 : clear dst bytes <= null - or t0, t1, t0 # e1 : (stall) - nop - nop - -1: stq_u t0, 0(a0) # L : - ret (t9) # L0 : Latency=3 - nop - nop - - /* Add the end-of-count bit to the eos detection bitmask. */ -$a_eoc: - or t10, t7, t7 # E : - br $a_eos # L0 : Latency=3 - nop - nop - - .end stxncpy_aligned - - .align 4 - .ent __stxncpy - .globl __stxncpy -__stxncpy: - .frame sp, 0, t9, 0 - .prologue 0 - - /* Are source and destination co-aligned? */ - xor a0, a1, t1 # E : - and a0, 7, t0 # E : find dest misalignment - and t1, 7, t1 # E : (stall) - addq a2, t0, a2 # E : bias count by dest misalignment (stall) - - subq a2, 1, a2 # E : - and a2, 7, t2 # E : (stall) - srl a2, 3, a2 # U : a2 = loop counter = (count - 1)/8 (stall) - addq zero, 1, t10 # E : - - sll t10, t2, t10 # U : t10 = bitmask of last count byte - bne t1, $unaligned # U : - /* We are co-aligned; take care of a partial first word. */ - ldq_u t1, 0(a1) # L : load first src word - addq a1, 8, a1 # E : - - beq t0, stxncpy_aligned # U : avoid loading dest word if not needed - ldq_u t0, 0(a0) # L : - nop - nop - - br stxncpy_aligned # .. e1 : - nop - nop - nop - - - -/* The source and destination are not co-aligned. Align the destination - and cope. We have to be very careful about not reading too much and - causing a SEGV. */ - - .align 4 -$u_head: - /* We know just enough now to be able to assemble the first - full source word. We can still find a zero at the end of it - that prevents us from outputting the whole thing. - - On entry to this basic block: - t0 == the first dest word, unmasked - t1 == the shifted low bits of the first source word - t6 == bytemask that is -1 in dest word bytes */ - - ldq_u t2, 8(a1) # L : Latency=3 load second src word - addq a1, 8, a1 # E : - mskql t0, a0, t0 # U : mask trailing garbage in dst - extqh t2, a1, t4 # U : (3 cycle stall on t2) - - or t1, t4, t1 # E : first aligned src word complete (stall) - mskqh t1, a0, t1 # U : mask leading garbage in src (stall) - or t0, t1, t0 # E : first output word complete (stall) - or t0, t6, t6 # E : mask original data for zero test (stall) - - cmpbge zero, t6, t7 # E : - beq a2, $u_eocfin # U : - lda t6, -1 # E : - nop - - bne t7, $u_final # U : - mskql t6, a1, t6 # U : mask out bits already seen - stq_u t0, 0(a0) # L : store first output word - or t6, t2, t2 # E : - - cmpbge zero, t2, t7 # E : find nulls in second partial - addq a0, 8, a0 # E : - subq a2, 1, a2 # E : - bne t7, $u_late_head_exit # U : - - /* Finally, we've got all the stupid leading edge cases taken care - of and we can set up to enter the main loop. */ - extql t2, a1, t1 # U : position hi-bits of lo word - beq a2, $u_eoc # U : - ldq_u t2, 8(a1) # L : read next high-order source word - addq a1, 8, a1 # E : - - extqh t2, a1, t0 # U : position lo-bits of hi word (stall) - cmpbge zero, t2, t7 # E : - nop - bne t7, $u_eos # U : - - /* Unaligned copy main loop. In order to avoid reading too much, - the loop is structured to detect zeros in aligned source words. - This has, unfortunately, effectively pulled half of a loop - iteration out into the head and half into the tail, but it does - prevent nastiness from accumulating in the very thing we want - to run as fast as possible. - - On entry to this basic block: - t0 == the shifted low-order bits from the current source word - t1 == the shifted high-order bits from the previous source word - t2 == the unshifted current source word - - We further know that t2 does not contain a null terminator. */ - - .align 4 -$u_loop: - or t0, t1, t0 # E : current dst word now complete - subq a2, 1, a2 # E : decrement word count - extql t2, a1, t1 # U : extract high bits for next time - addq a0, 8, a0 # E : - - stq_u t0, -8(a0) # L : save the current word - beq a2, $u_eoc # U : - ldq_u t2, 8(a1) # L : Latency=3 load high word for next time - addq a1, 8, a1 # E : - - extqh t2, a1, t0 # U : extract low bits (2 cycle stall) - cmpbge zero, t2, t7 # E : test new word for eos - nop - beq t7, $u_loop # U : - - /* We've found a zero somewhere in the source word we just read. - If it resides in the lower half, we have one (probably partial) - word to write out, and if it resides in the upper half, we - have one full and one partial word left to write out. - - On entry to this basic block: - t0 == the shifted low-order bits from the current source word - t1 == the shifted high-order bits from the previous source word - t2 == the unshifted current source word. */ -$u_eos: - or t0, t1, t0 # E : first (partial) source word complete - nop - cmpbge zero, t0, t7 # E : is the null in this first bit? (stall) - bne t7, $u_final # U : (stall) - - stq_u t0, 0(a0) # L : the null was in the high-order bits - addq a0, 8, a0 # E : - subq a2, 1, a2 # E : - nop - -$u_late_head_exit: - extql t2, a1, t0 # U : - cmpbge zero, t0, t7 # E : - or t7, t10, t6 # E : (stall) - cmoveq a2, t6, t7 # E : Latency=2, extra map slot (stall) - - /* Take care of a final (probably partial) result word. - On entry to this basic block: - t0 == assembled source word - t7 == cmpbge mask that found the null. */ -$u_final: - negq t7, t6 # E : isolate low bit set - and t6, t7, t8 # E : (stall) - and t8, 0x80, t6 # E : avoid dest word load if we can (stall) - bne t6, 1f # U : (stall) - - ldq_u t1, 0(a0) # L : - subq t8, 1, t6 # E : - or t6, t8, t7 # E : (stall) - zapnot t0, t7, t0 # U : kill source bytes > null - - zap t1, t7, t1 # U : kill dest bytes <= null - or t0, t1, t0 # E : (stall) - nop - nop - -1: stq_u t0, 0(a0) # L : - ret (t9) # L0 : Latency=3 - - /* Got to end-of-count before end of string. - On entry to this basic block: - t1 == the shifted high-order bits from the previous source word */ -$u_eoc: - and a1, 7, t6 # E : - sll t10, t6, t6 # U : (stall) - and t6, 0xff, t6 # E : (stall) - bne t6, 1f # U : (stall) - - ldq_u t2, 8(a1) # L : load final src word - nop - extqh t2, a1, t0 # U : extract low bits for last word (stall) - or t1, t0, t1 # E : (stall) - -1: cmpbge zero, t1, t7 # E : - mov t1, t0 - -$u_eocfin: # end-of-count, final word - or t10, t7, t7 # E : - br $u_final # L0 : Latency=3 - - /* Unaligned copy entry point. */ - .align 4 -$unaligned: - - ldq_u t1, 0(a1) # L : load first source word - and a0, 7, t4 # E : find dest misalignment - and a1, 7, t5 # E : find src misalignment - /* Conditionally load the first destination word and a bytemask - with 0xff indicating that the destination byte is sacrosanct. */ - mov zero, t0 # E : - - mov zero, t6 # E : - beq t4, 1f # U : - ldq_u t0, 0(a0) # L : - lda t6, -1 # E : - - mskql t6, a0, t6 # U : - nop - nop -1: subq a1, t4, a1 # E : sub dest misalignment from src addr - - /* If source misalignment is larger than dest misalignment, we need - extra startup checks to avoid SEGV. */ - - cmplt t4, t5, t8 # E : - extql t1, a1, t1 # U : shift src into place - lda t2, -1 # E : for creating masks later - beq t8, $u_head # U : (stall) - - mskqh t2, t5, t2 # U : begin src byte validity mask - cmpbge zero, t1, t7 # E : is there a zero? - extql t2, a1, t2 # U : - or t7, t10, t5 # E : test for end-of-count too - - cmpbge zero, t2, t3 # E : - cmoveq a2, t5, t7 # E : Latency=2, extra map slot - nop # E : keep with cmoveq - andnot t7, t3, t7 # E : (stall) - - beq t7, $u_head # U : - /* At this point we've found a zero in the first partial word of - the source. We need to isolate the valid source data and mask - it into the original destination data. (Incidentally, we know - that we'll need at least one byte of that original dest word.) */ - ldq_u t0, 0(a0) # L : - negq t7, t6 # E : build bitmask of bytes <= zero - mskqh t1, t4, t1 # U : - - and t6, t7, t8 # E : - subq t8, 1, t6 # E : (stall) - or t6, t8, t7 # E : (stall) - zapnot t2, t7, t2 # U : prepare source word; mirror changes (stall) - - zapnot t1, t7, t1 # U : to source validity mask - andnot t0, t2, t0 # E : zero place for source to reside - or t0, t1, t0 # E : and put it there (stall both t0, t1) - stq_u t0, 0(a0) # L : (stall) - - ret (t9) # L0 : Latency=3 - nop - nop - nop - - .end __stxncpy - diff --git a/sysdeps/alpha/alphaev67/Implies b/sysdeps/alpha/alphaev67/Implies deleted file mode 100644 index 49d19c4ad8..0000000000 --- a/sysdeps/alpha/alphaev67/Implies +++ /dev/null @@ -1 +0,0 @@ -alpha/alphaev6 diff --git a/sysdeps/alpha/alphaev67/ffs.S b/sysdeps/alpha/alphaev67/ffs.S deleted file mode 100644 index fb1cdd932c..0000000000 --- a/sysdeps/alpha/alphaev67/ffs.S +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2000, 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Finds the first bit set in an integer. */ - -#include <sysdep.h> - - .arch ev6 - .set noreorder - .set noat - - -ENTRY(__ffs) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - zap $16, 0xF0, $16 - cttz $16, $0 - addq $0, 1, $0 - cmoveq $16, 0, $0 - - nop - nop - nop - ret - -END(__ffs) - -weak_alias (__ffs, ffs) -libc_hidden_builtin_def (ffs) diff --git a/sysdeps/alpha/alphaev67/ffsll.S b/sysdeps/alpha/alphaev67/ffsll.S deleted file mode 100644 index 72ef094189..0000000000 --- a/sysdeps/alpha/alphaev67/ffsll.S +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2000 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Finds the first bit set in a long. */ - -#include <sysdep.h> - - .arch ev6 - .set noreorder - .set noat - -ENTRY(ffsl) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - cttz $16, $0 - addq $0, 1, $0 - cmoveq $16, 0, $0 - ret - -END(ffsl) - -weak_extern (ffsl) -weak_alias (ffsl, ffsll) diff --git a/sysdeps/alpha/alphaev67/fpu/Implies b/sysdeps/alpha/alphaev67/fpu/Implies deleted file mode 100644 index 9e3f12d0ac..0000000000 --- a/sysdeps/alpha/alphaev67/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -alpha/alphaev6/fpu diff --git a/sysdeps/alpha/alphaev67/rawmemchr.S b/sysdeps/alpha/alphaev67/rawmemchr.S deleted file mode 100644 index 8c7e9423b0..0000000000 --- a/sysdeps/alpha/alphaev67/rawmemchr.S +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright (C) 2000, 2002 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Return pointer to first occurrence of CH in STR. */ - -#include <sysdep.h> - - .arch ev6 - .set noreorder - .set noat - -ENTRY(__rawmemchr) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - ldq_u t0, 0(a0) # L : load first quadword Latency=3 - and a1, 0xff, t3 # E : 00000000000000ch - insbl a1, 1, t5 # U : 000000000000ch00 - insbl a1, 7, a2 # U : ch00000000000000 - - insbl t3, 6, a3 # U : 00ch000000000000 - or t5, t3, a1 # E : 000000000000chch - andnot a0, 7, v0 # E : align our loop pointer - lda t4, -1 # E : build garbage mask - - mskqh t4, a0, t4 # U : only want relevant part of first quad - or a2, a3, a2 # E : chch000000000000 - inswl a1, 2, t5 # E : 00000000chch0000 - inswl a1, 4, a3 # E : 0000chch00000000 - - or a1, a2, a1 # E : chch00000000chch - or a3, t5, t5 # E : 0000chchchch0000 - cmpbge zero, t4, t4 # E : bits set iff byte is garbage - nop # E : - - /* This quad is _very_ serialized. Lots of stalling happens */ - or t5, a1, a1 # E : chchchchchchchch - xor t0, a1, t1 # E : make bytes == c zero - cmpbge zero, t1, t0 # E : bits set iff byte == c - andnot t0, t4, t0 # E : clear garbage bits - - cttz t0, a2 # U0 : speculative (in case we get a match) - nop # E : - nop # E : - bne t0, $found # U : - - /* - * Yuk. This loop is going to stall like crazy waiting for the - * data to be loaded. Not much can be done about it unless it's - * unrolled multiple times, which is generally unsafe. - */ -$loop: - ldq t0, 8(v0) # L : Latency=3 - addq v0, 8, v0 # E : - xor t0, a1, t1 # E : - cmpbge zero, t1, t0 # E : bits set iff byte == c - - cttz t0, a2 # U0 : speculative (in case we get a match) - nop # E : - nop # E : - beq t0, $loop # U : - -$found: - negq t0, t1 # E : clear all but least set bit - and t0, t1, t0 # E : - addq v0, a2, v0 # E : Add in the bit number from above - ret # L0 : - - END(__rawmemchr) - -libc_hidden_def (__rawmemchr) -weak_alias (__rawmemchr, rawmemchr) diff --git a/sysdeps/alpha/alphaev67/stpcpy.S b/sysdeps/alpha/alphaev67/stpcpy.S deleted file mode 100644 index b5da4e05d3..0000000000 --- a/sysdeps/alpha/alphaev67/stpcpy.S +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2000, 2002, 2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@redhat.com>. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Copy SRC to DEST returning the address of the terminating 0 in DEST. */ - -#include <sysdep.h> - - .arch ev6 - .set noreorder - .set noat - .text - -ENTRY(__stpcpy) - ldgp gp, 0(pv) -#ifdef PROF - lda AT, _mcount - jsr AT, (AT), _mcount -#endif - .prologue 1 - - .align 4 - mov a0, v0 - nop - jsr t9, __stxcpy - - # t8 = bitmask (with one bit set) indicating the last byte written - # a0 = unaligned address of the last *word* written - - cttz t8, t8 - andnot a0, 7, a0 - addq a0, t8, v0 - ret - - END(__stpcpy) - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) diff --git a/sysdeps/alpha/alphaev67/stpncpy.S b/sysdeps/alpha/alphaev67/stpncpy.S deleted file mode 100644 index 4d61d71317..0000000000 --- a/sysdeps/alpha/alphaev67/stpncpy.S +++ /dev/null @@ -1,116 +0,0 @@ -/* Copyright (C) 2000, 2002 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@redhat.com) - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Copy no more then N bytes from SRC to DEST, returning the address of - the terminating '\0' in DEST. */ - -#include <sysdep.h> - - .arch ev6 - .set noat - .set noreorder - .text - -ENTRY(__stpncpy) - ldgp gp, 0(pv) -#ifdef PROF - lda AT, _mcount - jsr AT, (AT), _mcount -#endif - .prologue 1 - - mov a0, v0 - beq a2, $zerocount - - .align 4 - nop - nop - jsr t9, __stxncpy # do the work of the copy - - cttz t8, t4 - zapnot t0, t8, t5 - andnot a0, 7, a0 - bne a2, $multiword # do we have full words left? - - subq t8, 1, t2 - subq t10, 1, t3 - cmpult zero, t5, t5 - addq a0, t4, v0 - - or t2, t8, t2 - or t3, t10, t3 - addq v0, t5, v0 - andnot t3, t2, t3 - - zap t0, t3, t0 - nop - stq t0, 0(a0) - ret - -$multiword: - subq t8, 1, t7 # clear the final bits in the prev word - cmpult zero, t5, t5 - or t7, t8, t7 - zapnot t0, t7, t0 - - subq a2, 1, a2 - stq t0, 0(a0) - addq a0, 8, a1 - beq a2, 1f # loop over full words remaining - - nop - nop - nop - blbc a2, 0f - - stq zero, 0(a1) - subq a2, 1, a2 - addq a1, 8, a1 - beq a2, 1f - -0: stq zero, 0(a1) - subq a2, 2, a2 - nop - nop - - stq zero, 8(a1) - addq a1, 16, a1 - nop - bne a2, 0b - -1: ldq t0, 0(a1) # clear the leading bits in the final word - subq t10, 1, t7 - addq a0, t4, v0 - nop - - or t7, t10, t7 - addq v0, t5, v0 - zap t0, t7, t0 - stq t0, 0(a1) - -$zerocount: - nop - nop - nop - ret - - END(__stpncpy) - -libc_hidden_def (__stpncpy) -weak_alias (__stpncpy, stpncpy) diff --git a/sysdeps/alpha/alphaev67/strcat.S b/sysdeps/alpha/alphaev67/strcat.S deleted file mode 100644 index ae7c48808a..0000000000 --- a/sysdeps/alpha/alphaev67/strcat.S +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 2000, 2003 Free Software Foundation, Inc. - Contributed by Richard Henderson <rth@tamu.edu>, 1996. - EV67 optimized by Rick Gorton <rick.gorton@alpha-processor.com>. - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Append a null-terminated string from SRC to DST. */ - -#include <sysdep.h> - - .arch ev6 - .set noreorder - .text - -ENTRY(strcat) - ldgp gp, 0(pv) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - mov $16, $0 # E : set up return value - /* Find the end of the string. */ - ldq_u $1, 0($16) # L : load first quadword (a0 may be misaligned) - lda $2, -1 # E : - insqh $2, $16, $2 # U : - - andnot $16, 7, $16 # E : - or $2, $1, $1 # E : - cmpbge $31, $1, $2 # E : bits set iff byte == 0 - bne $2, $found # U : - -$loop: ldq $1, 8($16) # L : - addq $16, 8, $16 # E : - cmpbge $31, $1, $2 # E : - beq $2, $loop # U : - -$found: cttz $2, $3 # U0 : - addq $16, $3, $16 # E : - /* Now do the append. */ - mov $26, $23 # E : - jmp $31, __stxcpy # L0 : - - END(strcat) -libc_hidden_builtin_def (strcat) diff --git a/sysdeps/alpha/alphaev67/strchr.S b/sysdeps/alpha/alphaev67/strchr.S deleted file mode 100644 index 101c7d489a..0000000000 --- a/sysdeps/alpha/alphaev67/strchr.S +++ /dev/null @@ -1,101 +0,0 @@ -/* Copyright (C) 2000, 2003 Free Software Foundation, Inc. - Contributed by Richard Henderson <rth@tamu.edu>, 1996. - EV67 optimized by Rick Gorton <rick.gorton@alpha-processor.com>. - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Return the address of a given character within a null-terminated - string, or null if it is not found. */ - -#include <sysdep.h> - - .arch ev6 - .set noreorder - .set noat - -ENTRY(strchr) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - ldq_u t0, 0(a0) # L : load first quadword Latency=3 - and a1, 0xff, t3 # E : 00000000000000ch - insbl a1, 1, t5 # U : 000000000000ch00 - insbl a1, 7, a2 # U : ch00000000000000 - - insbl t3, 6, a3 # U : 00ch000000000000 - or t5, t3, a1 # E : 000000000000chch - andnot a0, 7, v0 # E : align our loop pointer - lda t4, -1 # E : build garbage mask - - mskqh t4, a0, t4 # U : only want relevant part of first quad - or a2, a3, a2 # E : chch000000000000 - inswl a1, 2, t5 # E : 00000000chch0000 - inswl a1, 4, a3 # E : 0000chch00000000 - - or a1, a2, a1 # E : chch00000000chch - or a3, t5, t5 # E : 0000chchchch0000 - cmpbge zero, t0, t2 # E : bits set iff byte == zero - cmpbge zero, t4, t4 # E : bits set iff byte is garbage - - /* This quad is _very_ serialized. Lots of stalling happens */ - or t5, a1, a1 # E : chchchchchchchch - xor t0, a1, t1 # E : make bytes == c zero - cmpbge zero, t1, t3 # E : bits set iff byte == c - or t2, t3, t0 # E : bits set iff char match or zero match - - andnot t0, t4, t0 # E : clear garbage bits - cttz t0, a2 # U0 : speculative (in case we get a match) - nop # E : - bne t0, $found # U : - - /* - * Yuk. This loop is going to stall like crazy waiting for the - * data to be loaded. Not much can be done about it unless it's - * unrolled multiple times, which is generally unsafe. - */ -$loop: - ldq t0, 8(v0) # L : Latency=3 - addq v0, 8, v0 # E : - xor t0, a1, t1 # E : - cmpbge zero, t0, t2 # E : bits set iff byte == 0 - - cmpbge zero, t1, t3 # E : bits set iff byte == c - or t2, t3, t0 # E : - cttz t3, a2 # U0 : speculative (in case we get a match) - beq t0, $loop # U : - -$found: - negq t0, t1 # E : clear all but least set bit - and t0, t1, t0 # E : - and t0, t3, t1 # E : bit set iff byte was the char - addq v0, a2, v0 # E : Add in the bit number from above - - cmoveq t1, $31, v0 # E : Two mapping slots, latency = 2 - nop - nop - ret # L0 : - - END(strchr) - -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) diff --git a/sysdeps/alpha/alphaev67/strlen.S b/sysdeps/alpha/alphaev67/strlen.S deleted file mode 100644 index b83eacceaf..0000000000 --- a/sysdeps/alpha/alphaev67/strlen.S +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2000, 2003 Free Software Foundation, Inc. - Contributed by David Mosberger (davidm@cs.arizona.edu). - EV67 optimized by Rick Gorton <rick.gorton@alpha-processor.com>. - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Finds length of a 0-terminated string. */ - -#include <sysdep.h> - - .arch ev6 - .set noreorder - .set noat - -ENTRY(strlen) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - ldq_u $1, 0($16) # L : load first quadword ($16 may be misaligned) - lda $2, -1($31) # E : - insqh $2, $16, $2 # U : - andnot $16, 7, $0 # E : - - or $2, $1, $1 # E : - cmpbge $31, $1, $2 # E : $2 <- bitmask: bit i == 1 <==> i-th byte == 0 - nop # E : - bne $2, $found # U : - -$loop: ldq $1, 8($0) # L : - addq $0, 8, $0 # E : addr += 8 - cmpbge $31, $1, $2 # E : - beq $2, $loop # U : - -$found: - cttz $2, $3 # U0 : - addq $0, $3, $0 # E : - subq $0, $16, $0 # E : - ret $31, ($26) # L0 : - - END(strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/alpha/alphaev67/strncat.S b/sysdeps/alpha/alphaev67/strncat.S deleted file mode 100644 index ae3257ca42..0000000000 --- a/sysdeps/alpha/alphaev67/strncat.S +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. - Contributed by Richard Henderson <rth@tamu.edu>, 1996. - EV67 optimized by Rick Gorton <rick.gorton@alpha-processor.com>. - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Append no more than COUNT characters from the null-terminated string SRC - to the null-terminated string DST. Always null-terminate the new DST. */ - -#include <sysdep.h> - - .arch ev6 - .set noreorder - .text - -ENTRY(strncat) - ldgp gp, 0(pv) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - mov a0, v0 # set up return value - beq a2, $zerocount # U : - /* Find the end of the string. */ - ldq_u t0, 0(a0) # L : load first quadword (a0 may be misaligned) - lda t1, -1 # E : - - insqh t1, v0, t1 # U : - andnot a0, 7, a0 # E : - nop # E : - or t1, t0, t0 # E : - - nop # E : - nop # E : - cmpbge zero, t0, t1 # E : bits set iff byte == 0 - bne t1, $found # U : - -$loop: ldq t0, 8(a0) # L : - addq a0, 8, a0 # E : - cmpbge zero, t0, t1 # E : - beq t1, $loop # U : - -$found: cttz t1, t2 # U0 : - addq a0, t2, a0 # E : - jsr t9, __stxncpy # L0 : Now do the append. - - /* Worry about the null termination. */ - - cttz t10, t2 # U0: byte offset of end-of-count. - bic a0, 7, a0 # E : word align the last write address. - zapnot t0, t8, t1 # U : was last byte a null? - nop # E : - - bne t1, 0f # U : - nop # E : - nop # E : - ret # L0 : - -0: addq t2, a0, a0 # E : address of end-of-count - stb zero, 1(a0) # L : - nop # E : - ret # L0 : - -$zerocount: - nop # E : - nop # E : - nop # E : - ret # L0 : - - END(strncat) diff --git a/sysdeps/alpha/alphaev67/strrchr.S b/sysdeps/alpha/alphaev67/strrchr.S deleted file mode 100644 index c46a3df4f8..0000000000 --- a/sysdeps/alpha/alphaev67/strrchr.S +++ /dev/null @@ -1,117 +0,0 @@ -/* Copyright (C) 2000, 2003 Free Software Foundation, Inc. - EV67 optimized by Rick Gorton <rick.gorton@alpha-processor.com>. - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Return the address of the last occurrence of a given character - within a null-terminated string, or null if it is not found. */ - -#include <sysdep.h> - - .arch ev6 - .set noreorder - .set noat - -ENTRY(strrchr) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - and a1, 0xff, t2 # E : 00000000000000ch - insbl a1, 1, t4 # U : 000000000000ch00 - insbl a1, 2, t5 # U : 0000000000ch0000 - ldq_u t0, 0(a0) # L : load first quadword Latency=3 - - mov zero, t6 # E : t6 is last match aligned addr - or t2, t4, a1 # E : 000000000000chch - sll t5, 8, t3 # U : 00000000ch000000 - mov zero, t8 # E : t8 is last match byte compare mask - - andnot a0, 7, v0 # E : align source addr - or t5, t3, t3 # E : 00000000chch0000 - sll a1, 32, t2 # U : 0000chch00000000 - sll a1, 48, t4 # U : chch000000000000 - - or t4, a1, a1 # E : chch00000000chch - or t2, t3, t2 # E : 0000chchchch0000 - or a1, t2, a1 # E : chchchchchchchch - lda t5, -1 # E : build garbage mask - - cmpbge zero, t0, t1 # E : bits set iff byte == zero - mskqh t5, a0, t4 # E : Complete garbage mask - xor t0, a1, t2 # E : make bytes == c zero - cmpbge zero, t4, t4 # E : bits set iff byte is garbage - - cmpbge zero, t2, t3 # E : bits set iff byte == c - andnot t1, t4, t1 # E : clear garbage from null test - andnot t3, t4, t3 # E : clear garbage from char test - bne t1, $eos # U : did we already hit the terminator? - - /* Character search main loop */ -$loop: - ldq t0, 8(v0) # L : load next quadword - cmovne t3, v0, t6 # E : save previous comparisons match - nop # : Latency=2, extra map slot (keep nop with cmov) - nop - - cmovne t3, t3, t8 # E : Latency=2, extra map slot - nop # : keep with cmovne - addq v0, 8, v0 # E : - xor t0, a1, t2 # E : - - cmpbge zero, t0, t1 # E : bits set iff byte == zero - cmpbge zero, t2, t3 # E : bits set iff byte == c - beq t1, $loop # U : if we havnt seen a null, loop - nop - - /* Mask out character matches after terminator */ -$eos: - negq t1, t4 # E : isolate first null byte match - and t1, t4, t4 # E : - subq t4, 1, t5 # E : build a mask of the bytes upto... - or t4, t5, t4 # E : ... and including the null - - and t3, t4, t3 # E : mask out char matches after null - cmovne t3, t3, t8 # E : save it, if match found Latency=2, extra map slot - nop # : Keep with cmovne - nop - - cmovne t3, v0, t6 # E : - nop # : Keep with cmovne - /* Locate the address of the last matched character */ - ctlz t8, t2 # U0 : Latency=3 (0x40 for t8=0) - nop - - cmoveq t8, 0x3f, t2 # E : Compensate for case when no match is seen - nop # E : hide the cmov latency (2) behind ctlz latency - lda t5, 0x3f($31) # E : - subq t5, t2, t5 # E : Normalize leading zero count - - addq t6, t5, v0 # E : and add to quadword address - ret # L0 : Latency=3 - nop - nop - -END(strrchr) - -weak_alias (strrchr, rindex) -libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/alpha/backtrace.c b/sysdeps/alpha/backtrace.c deleted file mode 100644 index 297029456d..0000000000 --- a/sysdeps/alpha/backtrace.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/ia64/backtrace.c> diff --git a/sysdeps/alpha/bb_init_func.S b/sysdeps/alpha/bb_init_func.S deleted file mode 100644 index f711c8cb74..0000000000 --- a/sysdeps/alpha/bb_init_func.S +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. - Contributed by David Mosberger (davidm@cs.arizona.edu). - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* __bb_init_func is invoked at the beginning of each function, before - any registers have been saved. It is therefore safe to use any - caller-saved (call-used) registers (except for argument registers - a1-a5). */ - -#include <sysdep.h> - -/* - * These offsets should match with "struct bb" declared in gcc/libgcc2.c. - */ -#define ZERO_WORD 0x00 -#define NEXT 0x20 - - .set noat - .set noreorder - -ENTRY(__bb_init_func) - .prologue 0 - - ldq t0, ZERO_WORD(a0) /* t0 <- blocks->zero_word */ - beq t0, init /* not initialized yet -> */ - ret - -END(__bb_init_func) - - .ent init -init: - .frame sp, 0x38, ra, 0 - subq sp, 0x38, sp - .prologue 0 - - stq pv, 0x30(sp) - br pv, 1f -1: ldgp gp, 0(pv) - - ldiq t1, __bb_head - lda t3, _gmonparam - ldq t2, 0(t1) - ldl t3, 0(t3) /* t3 = _gmonparam.state */ - lda t0, 1 - stq t0, ZERO_WORD(a0) /* blocks->zero_word = 1 */ - stq t2, NEXT(a0) /* blocks->next = __bb_head */ - stq a0, 0(t1) - bne t2, $leave - beq t3, $leave /* t3 == GMON_PROF_ON? yes -> */ - - /* also need to initialize destructor: */ - stq ra, 0x00(sp) - lda a0, __bb_exit_func - stq a1, 0x08(sp) - lda pv, atexit - stq a2, 0x10(sp) - stq a3, 0x18(sp) - stq a4, 0x20(sp) - stq a5, 0x28(sp) - jsr ra, (pv), atexit - ldq ra, 0x00(sp) - ldq a1, 0x08(sp) - ldq a2, 0x10(sp) - ldq a3, 0x18(sp) - ldq a4, 0x20(sp) - ldq a5, 0x28(sp) - -$leave: ldq pv, 0x30(sp) - addq sp, 0x38, sp - ret - - .end init diff --git a/sysdeps/alpha/bits/atomic.h b/sysdeps/alpha/bits/atomic.h deleted file mode 100644 index 36a740c758..0000000000 --- a/sysdeps/alpha/bits/atomic.h +++ /dev/null @@ -1,369 +0,0 @@ -/* Copyright (C) 2003 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdint.h> - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int16_t atomic16_t; -typedef uint16_t uatomic16_t; -typedef int_fast16_t atomic_fast16_t; -typedef uint_fast16_t uatomic_fast16_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef int64_t atomic64_t; -typedef uint64_t uatomic64_t; -typedef int_fast64_t atomic_fast64_t; -typedef uint_fast64_t uatomic_fast64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - - -#ifdef UP -# define __MB /* nothing */ -#else -# define __MB " mb\n" -#endif - - -/* Compare and exchange. For all of the "xxx" routines, we expect a - "__prev" and a "__cmp" variable to be provided by the enclosing scope, - in which values are returned. */ - -#define __arch_compare_and_exchange_xxx_8_int(mem, new, old, mb1, mb2) \ -({ \ - unsigned long __tmp, __snew, __addr64; \ - __asm__ __volatile__ ( \ - mb1 \ - " andnot %[__addr8],7,%[__addr64]\n" \ - " insbl %[__new],%[__addr8],%[__snew]\n" \ - "1: ldq_l %[__tmp],0(%[__addr64])\n" \ - " extbl %[__tmp],%[__addr8],%[__prev]\n" \ - " cmpeq %[__prev],%[__old],%[__cmp]\n" \ - " beq %[__cmp],2f\n" \ - " mskbl %[__tmp],%[__addr8],%[__tmp]\n" \ - " or %[__snew],%[__tmp],%[__tmp]\n" \ - " stq_c %[__tmp],0(%[__addr64])\n" \ - " beq %[__tmp],1b\n" \ - mb2 \ - "2:" \ - : [__prev] "=&r" (__prev), \ - [__snew] "=&r" (__snew), \ - [__tmp] "=&r" (__tmp), \ - [__cmp] "=&r" (__cmp), \ - [__addr64] "=&r" (__addr64) \ - : [__addr8] "r" (mem), \ - [__old] "Ir" ((uint64_t)(uint8_t)(uint64_t)(old)), \ - [__new] "r" (new) \ - : "memory"); \ -}) - -#define __arch_compare_and_exchange_xxx_16_int(mem, new, old, mb1, mb2) \ -({ \ - unsigned long __tmp, __snew, __addr64; \ - __asm__ __volatile__ ( \ - mb1 \ - " andnot %[__addr16],7,%[__addr64]\n" \ - " inswl %[__new],%[__addr16],%[__snew]\n" \ - "1: ldq_l %[__tmp],0(%[__addr64])\n" \ - " extwl %[__tmp],%[__addr16],%[__prev]\n" \ - " cmpeq %[__prev],%[__old],%[__cmp]\n" \ - " beq %[__cmp],2f\n" \ - " mskwl %[__tmp],%[__addr16],%[__tmp]\n" \ - " or %[__snew],%[__tmp],%[__tmp]\n" \ - " stq_c %[__tmp],0(%[__addr64])\n" \ - " beq %[__tmp],1b\n" \ - mb2 \ - "2:" \ - : [__prev] "=&r" (__prev), \ - [__snew] "=&r" (__snew), \ - [__tmp] "=&r" (__tmp), \ - [__cmp] "=&r" (__cmp), \ - [__addr64] "=&r" (__addr64) \ - : [__addr16] "r" (mem), \ - [__old] "Ir" ((uint64_t)(uint16_t)(uint64_t)(old)), \ - [__new] "r" (new) \ - : "memory"); \ -}) - -#define __arch_compare_and_exchange_xxx_32_int(mem, new, old, mb1, mb2) \ -({ \ - __asm__ __volatile__ ( \ - mb1 \ - "1: ldl_l %[__prev],%[__mem]\n" \ - " cmpeq %[__prev],%[__old],%[__cmp]\n" \ - " beq %[__cmp],2f\n" \ - " mov %[__new],%[__cmp]\n" \ - " stl_c %[__cmp],%[__mem]\n" \ - " beq %[__cmp],1b\n" \ - mb2 \ - "2:" \ - : [__prev] "=&r" (__prev), \ - [__cmp] "=&r" (__cmp) \ - : [__mem] "m" (*(mem)), \ - [__old] "Ir" ((uint64_t)(atomic32_t)(uint64_t)(old)), \ - [__new] "Ir" (new) \ - : "memory"); \ -}) - -#define __arch_compare_and_exchange_xxx_64_int(mem, new, old, mb1, mb2) \ -({ \ - __asm__ __volatile__ ( \ - mb1 \ - "1: ldq_l %[__prev],%[__mem]\n" \ - " cmpeq %[__prev],%[__old],%[__cmp]\n" \ - " beq %[__cmp],2f\n" \ - " mov %[__new],%[__cmp]\n" \ - " stq_c %[__cmp],%[__mem]\n" \ - " beq %[__cmp],1b\n" \ - mb2 \ - "2:" \ - : [__prev] "=&r" (__prev), \ - [__cmp] "=&r" (__cmp) \ - : [__mem] "m" (*(mem)), \ - [__old] "Ir" ((uint64_t)(old)), \ - [__new] "Ir" (new) \ - : "memory"); \ -}) - -/* For all "bool" routines, we return FALSE if exchange succesful. */ - -#define __arch_compare_and_exchange_bool_8_int(mem, new, old, mb1, mb2) \ -({ unsigned long __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_8_int(mem, new, old, mb1, mb2); \ - !__cmp; }) - -#define __arch_compare_and_exchange_bool_16_int(mem, new, old, mb1, mb2) \ -({ unsigned long __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_16_int(mem, new, old, mb1, mb2); \ - !__cmp; }) - -#define __arch_compare_and_exchange_bool_32_int(mem, new, old, mb1, mb2) \ -({ unsigned long __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_32_int(mem, new, old, mb1, mb2); \ - !__cmp; }) - -#define __arch_compare_and_exchange_bool_64_int(mem, new, old, mb1, mb2) \ -({ unsigned long __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_64_int(mem, new, old, mb1, mb2); \ - !__cmp; }) - -/* For all "val" routines, return the old value whether exchange - successful or not. */ - -#define __arch_compare_and_exchange_val_8_int(mem, new, old, mb1, mb2) \ -({ unsigned long __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_8_int(mem, new, old, mb1, mb2); \ - (typeof (*mem))__prev; }) - -#define __arch_compare_and_exchange_val_16_int(mem, new, old, mb1, mb2) \ -({ unsigned long __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_16_int(mem, new, old, mb1, mb2); \ - (typeof (*mem))__prev; }) - -#define __arch_compare_and_exchange_val_32_int(mem, new, old, mb1, mb2) \ -({ unsigned long __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_32_int(mem, new, old, mb1, mb2); \ - (typeof (*mem))__prev; }) - -#define __arch_compare_and_exchange_val_64_int(mem, new, old, mb1, mb2) \ -({ unsigned long __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_64_int(mem, new, old, mb1, mb2); \ - (typeof (*mem))__prev; }) - -/* Compare and exchange with "acquire" semantics, ie barrier after. */ - -#define atomic_compare_and_exchange_bool_acq(mem, new, old) \ - __atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \ - mem, new, old, "", __MB) - -#define atomic_compare_and_exchange_val_acq(mem, new, old) \ - __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ - mem, new, old, "", __MB) - -/* Compare and exchange with "release" semantics, ie barrier before. */ - -#define atomic_compare_and_exchange_bool_rel(mem, new, old) \ - __atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \ - mem, new, old, __MB, "") - -#define atomic_compare_and_exchange_val_rel(mem, new, old) \ - __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ - mem, new, old, __MB, "") - - -/* Atomically store value and return the previous value. */ - -#define __arch_exchange_8_int(mem, value, mb1, mb2) \ -({ \ - unsigned long __ret, __tmp, __addr64, __sval; \ - __asm__ __volatile__ ( \ - mb1 \ - " andnot %[__addr8],7,%[__addr64]\n" \ - " insbl %[__value],%[__addr8],%[__sval]\n" \ - "1: ldq_l %[__tmp],0(%[__addr64])\n" \ - " extbl %[__tmp],%[__addr8],%[__ret]\n" \ - " mskbl %[__tmp],%[__addr8],%[__tmp]\n" \ - " or %[__sval],%[__tmp],%[__tmp]\n" \ - " stq_c %[__tmp],0(%[__addr64])\n" \ - " beq %[__tmp],1b\n" \ - mb2 \ - : [__ret] "=&r" (__ret), \ - [__sval] "=&r" (__sval), \ - [__tmp] "=&r" (__tmp), \ - [__addr64] "=&r" (__addr64) \ - : [__addr8] "r" (mem), \ - [__value] "r" (value) \ - : "memory"); \ - __ret; }) - -#define __arch_exchange_16_int(mem, value, mb1, mb2) \ -({ \ - unsigned long __ret, __tmp, __addr64, __sval; \ - __asm__ __volatile__ ( \ - mb1 \ - " andnot %[__addr16],7,%[__addr64]\n" \ - " inswl %[__value],%[__addr16],%[__sval]\n" \ - "1: ldq_l %[__tmp],0(%[__addr64])\n" \ - " extwl %[__tmp],%[__addr16],%[__ret]\n" \ - " mskwl %[__tmp],%[__addr16],%[__tmp]\n" \ - " or %[__sval],%[__tmp],%[__tmp]\n" \ - " stq_c %[__tmp],0(%[__addr64])\n" \ - " beq %[__tmp],1b\n" \ - mb2 \ - : [__ret] "=&r" (__ret), \ - [__sval] "=&r" (__sval), \ - [__tmp] "=&r" (__tmp), \ - [__addr64] "=&r" (__addr64) \ - : [__addr16] "r" (mem), \ - [__value] "r" (value) \ - : "memory"); \ - __ret; }) - -#define __arch_exchange_32_int(mem, value, mb1, mb2) \ -({ \ - signed int __ret, __tmp; \ - __asm__ __volatile__ ( \ - mb1 \ - "1: ldl_l %[__ret],%[__mem]\n" \ - " mov %[__val],%[__tmp]\n" \ - " stl_c %[__tmp],%[__mem]\n" \ - " beq %[__tmp],1b\n" \ - mb2 \ - : [__ret] "=&r" (__ret), \ - [__tmp] "=&r" (__tmp) \ - : [__mem] "m" (*(mem)), \ - [__val] "Ir" (value) \ - : "memory"); \ - __ret; }) - -#define __arch_exchange_64_int(mem, value, mb1, mb2) \ -({ \ - unsigned long __ret, __tmp; \ - __asm__ __volatile__ ( \ - mb1 \ - "1: ldq_l %[__ret],%[__mem]\n" \ - " mov %[__val],%[__tmp]\n" \ - " stq_c %[__tmp],%[__mem]\n" \ - " beq %[__tmp],1b\n" \ - mb2 \ - : [__ret] "=&r" (__ret), \ - [__tmp] "=&r" (__tmp) \ - : [__mem] "m" (*(mem)), \ - [__val] "Ir" (value) \ - : "memory"); \ - __ret; }) - -#define atomic_exchange_acq(mem, value) \ - __atomic_val_bysize (__arch_exchange, int, mem, value, "", __MB) - -#define atomic_exchange_rel(mem, value) \ - __atomic_val_bysize (__arch_exchange, int, mem, value, __MB, "") - - -/* Atomically add value and return the previous (unincremented) value. */ - -#define __arch_exchange_and_add_8_int(mem, value, mb1, mb2) \ - ({ __builtin_trap (); 0; }) - -#define __arch_exchange_and_add_16_int(mem, value, mb1, mb2) \ - ({ __builtin_trap (); 0; }) - -#define __arch_exchange_and_add_32_int(mem, value, mb1, mb2) \ -({ \ - signed int __ret, __tmp; \ - __asm__ __volatile__ ( \ - mb1 \ - "1: ldl_l %[__ret],%[__mem]\n" \ - " addl %[__ret],%[__val],%[__tmp]\n" \ - " stl_c %[__tmp],%[__mem]\n" \ - " beq %[__tmp],1b\n" \ - mb2 \ - : [__ret] "=&r" (__ret), \ - [__tmp] "=&r" (__tmp) \ - : [__mem] "m" (*(mem)), \ - [__val] "Ir" ((signed int)(value)) \ - : "memory"); \ - __ret; }) - -#define __arch_exchange_and_add_64_int(mem, value, mb1, mb2) \ -({ \ - unsigned long __ret, __tmp; \ - __asm__ __volatile__ ( \ - mb1 \ - "1: ldq_l %[__ret],%[__mem]\n" \ - " addq %[__ret],%[__val],%[__tmp]\n" \ - " stq_c %[__tmp],%[__mem]\n" \ - " beq %[__tmp],1b\n" \ - mb2 \ - : [__ret] "=&r" (__ret), \ - [__tmp] "=&r" (__tmp) \ - : [__mem] "m" (*(mem)), \ - [__val] "Ir" ((unsigned long)(value)) \ - : "memory"); \ - __ret; }) - -/* ??? Barrier semantics for atomic_exchange_and_add appear to be - undefined. Use full barrier for now, as that's safe. */ -#define atomic_exchange_and_add(mem, value) \ - __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, __MB, __MB) - - -/* ??? Blah, I'm lazy. Implement these later. Can do better than the - compare-and-exchange loop provided by generic code. - -#define atomic_decrement_if_positive(mem) -#define atomic_bit_test_set(mem, bit) - -*/ - -#ifndef UP -# define atomic_full_barrier() __asm ("mb" : : : "memory"); -# define atomic_read_barrier() __asm ("mb" : : : "memory"); -# define atomic_write_barrier() __asm ("wmb" : : : "memory"); -#endif diff --git a/sysdeps/alpha/bits/endian.h b/sysdeps/alpha/bits/endian.h deleted file mode 100644 index 8a16e14e24..0000000000 --- a/sysdeps/alpha/bits/endian.h +++ /dev/null @@ -1,7 +0,0 @@ -/* Alpha is little-endian. */ - -#ifndef _ENDIAN_H -# error "Never use <bits/endian.h> directly; include <endian.h> instead." -#endif - -#define __BYTE_ORDER __LITTLE_ENDIAN diff --git a/sysdeps/alpha/bits/link.h b/sysdeps/alpha/bits/link.h deleted file mode 100644 index 429faff432..0000000000 --- a/sysdeps/alpha/bits/link.h +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _LINK_H -# error "Never include <bits/link.h> directly; use <link.h> instead." -#endif - - -/* Registers for entry into PLT on Alpha. */ -typedef struct La_alpha_regs -{ - uint64_t lr_r26; - uint64_t lr_sp; - uint64_t lr_r16; - uint64_t lr_r17; - uint64_t lr_r18; - uint64_t lr_r19; - uint64_t lr_r20; - uint64_t lr_r21; - double lr_f16; - double lr_f17; - double lr_f18; - double lr_f19; - double lr_f20; - double lr_f21; -} La_alpha_regs; - -/* Return values for calls from PLT on Alpha. */ -typedef struct La_alpha_retval -{ - uint64_t lrv_r0; - uint64_t lrv_r1; - double lrv_f0; - double lrv_f1; -} La_alpha_retval; - - -__BEGIN_DECLS - -extern Elf64_Addr la_alpha_gnu_pltenter (Elf64_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_alpha_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_alpha_gnu_pltexit (Elf64_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_alpha_regs *__inregs, - La_alpha_retval *__outregs, - const char *symname); - -__END_DECLS diff --git a/sysdeps/alpha/bits/mathdef.h b/sysdeps/alpha/bits/mathdef.h deleted file mode 100644 index cbfaf68e22..0000000000 --- a/sysdeps/alpha/bits/mathdef.h +++ /dev/null @@ -1,80 +0,0 @@ -/* Copyright (C) 1997,1998,1999,2000,2003,2004,2006 - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use <bits/mathdef.h> directly; include <math.h> instead" -#endif - -/* FIXME! This file describes properties of the compiler, not the machine; - it should not be part of libc! */ - -#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF -# define _MATH_H_MATHDEF 1 - -# ifdef __GNUC__ -# if __STDC__ == 1 - -/* In GNU or ANSI mode, gcc leaves `float' expressions as-is. */ -typedef float float_t; -typedef double double_t; - -# else - -/* For `gcc -traditional', `float' expressions are evaluated as `double'. */ -typedef double float_t; -typedef double double_t; - -# endif -# else - -/* Wild guess at types for float_t and double_t. */ -typedef double float_t; -typedef double double_t; - -# endif - -/* The values returned by `ilogb' for 0 and NaN respectively. */ -# define FP_ILOGB0 (-2147483647) -# define FP_ILOGBNAN (2147483647) - -#endif /* ISO C99 && MATH_H */ - -#if defined _COMPLEX_H && !defined _COMPLEX_H_MATHDEF -# define _COMPLEX_H_MATHDEF 1 -# if defined(__GNUC__) && !__GNUC_PREREQ(3,4) - -/* Due to an ABI change, we need to remap the complex float symbols. */ -# define _Mdouble_ float -# define __MATHCALL(function, args) \ - __MATHDECL (_Complex float, function, args) -# define __MATHDECL(type, function, args) \ - __MATHDECL_1(type, function##f, args, __c1_##function##f); \ - __MATHDECL_1(type, __##function##f, args, __c1_##function##f) -# define __MATHDECL_1(type, function, args, alias) \ - extern type function args __asm__(#alias) __THROW - -# include <bits/cmathcalls.h> - -# undef _Mdouble_ -# undef __MATHCALL -# undef __MATHDECL -# undef __MATHDECL_1 - -# endif /* GNUC before 3.4 */ -#endif /* COMPLEX_H */ diff --git a/sysdeps/alpha/bits/setjmp.h b/sysdeps/alpha/bits/setjmp.h deleted file mode 100644 index eb0b478fb8..0000000000 --- a/sysdeps/alpha/bits/setjmp.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Define the machine-dependent type `jmp_buf'. Alpha version. - Copyright (C) 1992,1997,2003,2005,2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _BITS_SETJMP_H -#define _BITS_SETJMP_H 1 - -#if !defined _SETJMP_H && !defined _PTHREAD_H -# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." -#endif - -/* The previous bits/setjmp.h had __jmp_buf defined as a structure. - We use an array of 'long int' instead, to make writing the - assembler easier. Naturally, user code should not depend on - either representation. */ - -/* - * Integer registers: - * $0 is the return value (va); - * $1-$8, $22-$25, $28 are call-used (t0-t7, t8-t11, at); - * $9-$14 we save here (s0-s5); - * $15 is the FP and we save it here (fp or s6); - * $16-$21 are input arguments (call-used) (a0-a5); - * $26 is the return PC and we save it here (ra); - * $27 is the procedure value (i.e., the address of __setjmp) (pv or t12); - * $29 is the global pointer, which the caller will reconstruct - * from the return address restored in $26 (gp); - * $30 is the stack pointer and we save it here (sp); - * $31 is always zero (zero). - * - * Floating-point registers: - * $f0 is the floating return value; - * $f1, $f10-$f15, $f22-$f30 are call-used; - * $f2-$f9 we save here; - * $f16-$21 are input args (call-used); - * $f31 is always zero. - * - * Note that even on Alpha hardware that does not have an FPU (there - * isn't such a thing currently) it is required to implement the FP - * registers. - */ - -#ifndef __ASSEMBLY__ -typedef long int __jmp_buf[17]; -#endif - -#endif /* bits/setjmp.h */ diff --git a/sysdeps/alpha/bsd-_setjmp.S b/sysdeps/alpha/bsd-_setjmp.S deleted file mode 100644 index 4e6a2da560..0000000000 --- a/sysdeps/alpha/bsd-_setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* _setjmp is in setjmp.S */ diff --git a/sysdeps/alpha/bsd-setjmp.S b/sysdeps/alpha/bsd-setjmp.S deleted file mode 100644 index 1da848d2f1..0000000000 --- a/sysdeps/alpha/bsd-setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* setjmp is in setjmp.S */ diff --git a/sysdeps/alpha/bzero.S b/sysdeps/alpha/bzero.S deleted file mode 100644 index 87e575babb..0000000000 --- a/sysdeps/alpha/bzero.S +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Fill a block of memory with zeros. Optimized for the Alpha architecture: - - - memory accessed as aligned quadwords only - - destination memory not read unless needed for good cache behaviour - - basic blocks arranged to optimize branch prediction for full-quadword - aligned memory blocks. - - partial head and tail quadwords constructed with byte-mask instructions - - This is generally scheduled for the EV5 (got to look out for my own - interests :-), but with EV4 needs in mind. There *should* be no more - stalls for the EV4 than there are for the EV5. -*/ - - -#include <sysdep.h> - - .set noat - .set noreorder - - .text - -/* There is a problem with either gdb (as of 4.16) or gas (as of 2.7) that - doesn't like putting the entry point for a procedure somewhere in the - middle of the procedure descriptor. Work around this by putting the main - loop in its own procedure descriptor. */ - - /* On entry to this basic block: - t3 == loop counter - t4 == bytes in partial final word - a0 == possibly misaligned destination pointer */ - - .ent bzero_loop - .align 3 -bzero_loop: - .frame sp, 0, ra, 0 - .prologue 0 - - beq t3, $tail # - blbc t3, 0f # skip single store if count even - - stq_u zero, 0(a0) # e0 : store one word - subq t3, 1, t3 # .. e1 : - addq a0, 8, a0 # e0 : - beq t3, $tail # .. e1 : - -0: stq_u zero, 0(a0) # e0 : store two words - subq t3, 2, t3 # .. e1 : - stq_u zero, 8(a0) # e0 : - addq a0, 16, a0 # .. e1 : - bne t3, 0b # e1 : - -$tail: bne t4, 1f # is there a tail to do? - ret # no - -1: ldq_u t0, 0(a0) # yes, load original data - mskqh t0, t4, t0 # - stq_u t0, 0(a0) # - ret # - - .end bzero_loop - -ENTRY(__bzero) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - mov a0, v0 # e0 : move return value in place - beq a1, $done # .. e1 : early exit for zero-length store - and a0, 7, t1 # e0 : - addq a1, t1, a1 # e1 : add dest misalignment to count - srl a1, 3, t3 # e0 : loop = count >> 3 - and a1, 7, t4 # .. e1 : find number of bytes in tail - unop # : - beq t1, bzero_loop # e1 : aligned head, jump right in - - ldq_u t0, 0(a0) # e0 : load original data to mask into - cmpult a1, 8, t2 # .. e1 : is this a sub-word set? - bne t2, $oneq # e1 : - - mskql t0, a0, t0 # e0 : we span words. finish this partial - subq t3, 1, t3 # e0 : - addq a0, 8, a0 # .. e1 : - stq_u t0, -8(a0) # e0 : - br bzero_loop # .. e1 : - - .align 3 -$oneq: - mskql t0, a0, t2 # e0 : - mskqh t0, a1, t3 # e0 : - or t2, t3, t0 # e1 : - stq_u t0, 0(a0) # e0 : - -$done: ret - - END(__bzero) -weak_alias (__bzero, bzero) diff --git a/sysdeps/alpha/div.S b/sysdeps/alpha/div.S deleted file mode 100644 index d1a724d375..0000000000 --- a/sysdeps/alpha/div.S +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright (C) 1996, 1997, 2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "div_libc.h" - -#undef FRAME -#ifdef __alpha_fix__ -#define FRAME 0 -#else -#define FRAME 16 -#endif - - .set noat - - .align 4 - .globl div - .ent div -div: - .frame sp, FRAME, ra -#if FRAME > 0 - lda sp, -FRAME(sp) -#endif -#ifdef PROF - .set macro - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .set nomacro - .prologue 1 -#else - .prologue 0 -#endif - - beq $18, $divbyzero - excb - mf_fpcr $f10 - - _ITOFT2 $17, $f0, 0, $18, $f1, 8 - - cvtqt $f0, $f0 - cvtqt $f1, $f1 - divt/c $f0, $f1, $f0 - cvttq/c $f0, $f0 - excb - mt_fpcr $f10 - _FTOIT $f0, $0, 0 - - mull $0, $18, $1 - subl $17, $1, $1 - - stl $0, 0(a0) - stl $1, 4(a0) - mov a0, v0 - -#if FRAME > 0 - lda sp, FRAME(sp) -#endif - ret - -$divbyzero: - mov a0, v0 - lda a0, GEN_INTDIV - call_pal PAL_gentrap - stl zero, 0(v0) - stl zero, 4(v0) - -#if FRAME > 0 - lda sp, FRAME(sp) -#endif - ret - - .end div diff --git a/sysdeps/alpha/div_libc.h b/sysdeps/alpha/div_libc.h deleted file mode 100644 index b731b02e25..0000000000 --- a/sysdeps/alpha/div_libc.h +++ /dev/null @@ -1,164 +0,0 @@ -/* Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Common bits for implementing software divide. */ - -#include <sysdep.h> -#ifdef __linux__ -# include <asm/gentrap.h> -# include <asm/pal.h> -#else -# include <machine/pal.h> -#endif - -/* These are not normal C functions. Argument registers are t10 and t11; - the result goes in t12; the return address is in t9. Only t12 and AT - may be clobbered. */ -#define X t10 -#define Y t11 -#define RV t12 -#define RA t9 - -/* The secureplt format does not allow the division routines to be called - via plt; there aren't enough registers free to be clobbered. Avoid - setting the symbol type to STT_FUNC, so that the linker won't be tempted - to create a plt entry. */ -#define funcnoplt notype - -/* None of these functions should use implicit anything. */ - .set nomacro - .set noat - -/* Code fragment to invoke _mcount for profiling. This should be invoked - directly after allocation of the stack frame. */ -.macro CALL_MCOUNT -#ifdef PROF - stq ra, 0(sp) - stq pv, 8(sp) - stq gp, 16(sp) - cfi_rel_offset (ra, 0) - cfi_rel_offset (pv, 8) - cfi_rel_offset (gp, 16) - br AT, 1f - .set macro -1: ldgp gp, 0(AT) - mov RA, ra - lda AT, _mcount - jsr AT, (AT), _mcount - .set nomacro - ldq ra, 0(sp) - ldq pv, 8(sp) - ldq gp, 16(sp) - cfi_restore (ra) - cfi_restore (pv) - cfi_restore (gp) - /* Realign subsequent code with what we'd have without this - macro at all. This means aligned with one arithmetic insn - used within the bundle. */ - .align 4 - nop -#endif -.endm - -/* In order to make the below work, all top-level divide routines must - use the same frame size. */ -#define FRAME 64 - -/* Code fragment to generate an integer divide-by-zero fault. When - building libc.so, we arrange for there to be one copy of this code - placed late in the dso, such that all branches are forward. When - building libc.a, we use multiple copies to avoid having an out of - range branch. Users should jump to DIVBYZERO. */ - -.macro DO_DIVBYZERO -#ifdef PIC -#define DIVBYZERO __divbyzero - .section .gnu.linkonce.t.divbyzero, "ax", @progbits - .globl __divbyzero - .type __divbyzero, @function - .usepv __divbyzero, no - .hidden __divbyzero -#else -#define DIVBYZERO $divbyzero -#endif - - .align 4 -DIVBYZERO: - cfi_startproc - cfi_return_column (RA) - cfi_def_cfa_offset (FRAME) - - mov a0, RV - unop - lda a0, GEN_INTDIV - call_pal PAL_gentrap - - mov RV, a0 - clr RV - lda sp, FRAME(sp) - cfi_def_cfa_offset (0) - ret $31, (RA), 1 - - cfi_endproc - .size DIVBYZERO, .-DIVBYZERO -.endm - -/* Like the ev6 instructions, but fall back to stack use on prior machines. */ - - .arch ev6 - -.macro _ITOFS gr, fr, slot -#ifdef __alpha_fix__ - itofs \gr, \fr -#else - stl \gr, \slot(sp) - lds \fr, \slot(sp) -#endif -.endm - -.macro _ITOFT gr, fr, slot -#ifdef __alpha_fix__ - itoft \gr, \fr -#else - stq \gr, \slot(sp) - ldt \fr, \slot(sp) -#endif -.endm - -.macro _FTOIT fr, gr, slot -#ifdef __alpha_fix__ - ftoit \fr, \gr -#else - stt \fr, \slot(sp) - ldq \gr, \slot(sp) -#endif -.endm - -/* Similarly, but move two registers. Schedules better for pre-ev6. */ - -.macro _ITOFT2 gr1, fr1, slot1, gr2, fr2, slot2 -#ifdef __alpha_fix__ - itoft \gr1, \fr1 - itoft \gr2, \fr2 -#else - stq \gr1, \slot1(sp) - stq \gr2, \slot2(sp) - ldt \fr1, \slot1(sp) - ldt \fr2, \slot2(sp) -#endif -.endm diff --git a/sysdeps/alpha/divl.S b/sysdeps/alpha/divl.S deleted file mode 100644 index 9bac0450d0..0000000000 --- a/sysdeps/alpha/divl.S +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "div_libc.h" - -/* 32-bit signed int divide. This is not a normal C function. Argument - registers are t10 and t11, the result goes in t12. Only t12 and AT may - be clobbered. - - The FPU can handle all input values except zero. Whee! - - The FPCR save/restore is due to the fact that the EV6 _will_ set FPCR_INE - for cvttq/c even without /sui being set. It will not, however, properly - raise the exception, so we don't have to worry about FPCR_INED being clear - and so dying by SIGFPE. */ - -#ifndef EXTEND -#define EXTEND(S,D) sextl S, D -#endif - - .text - .align 4 - .globl __divl - .type __divl, @funcnoplt - .usepv __divl, no - - cfi_startproc - cfi_return_column (RA) -__divl: - lda sp, -FRAME(sp) - cfi_def_cfa_offset (FRAME) - CALL_MCOUNT - stt $f0, 0(sp) - excb - beq Y, DIVBYZERO - - stt $f1, 8(sp) - stt $f2, 16(sp) - cfi_rel_offset ($f0, 0) - cfi_rel_offset ($f1, 8) - cfi_rel_offset ($f2, 16) - mf_fpcr $f2 - - EXTEND (X, RV) - EXTEND (Y, AT) - _ITOFT2 RV, $f0, 24, AT, $f1, 32 - cvtqt $f0, $f0 - cvtqt $f1, $f1 - divt/c $f0, $f1, $f0 - cvttq/c $f0, $f0 - excb - mt_fpcr $f2 - _FTOIT $f0, RV, 24 - - ldt $f0, 0(sp) - ldt $f1, 8(sp) - ldt $f2, 16(sp) - lda sp, FRAME(sp) - cfi_restore ($f0) - cfi_restore ($f1) - cfi_restore ($f2) - cfi_def_cfa_offset (0) - sextl RV, RV - ret $31, (RA), 1 - - cfi_endproc - .size __divl, .-__divl - - DO_DIVBYZERO diff --git a/sysdeps/alpha/divlu.S b/sysdeps/alpha/divlu.S deleted file mode 100644 index 5c54bb54c0..0000000000 --- a/sysdeps/alpha/divlu.S +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED -#define EXTEND(S,D) zapnot S, 15, D -#define __divl __divlu -#include <divl.S> diff --git a/sysdeps/alpha/divq.S b/sysdeps/alpha/divq.S deleted file mode 100644 index d2ed2c5af6..0000000000 --- a/sysdeps/alpha/divq.S +++ /dev/null @@ -1,274 +0,0 @@ -/* Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "div_libc.h" - - -/* 64-bit signed long divide. These are not normal C functions. Argument - registers are t10 and t11, the result goes in t12. Only t12 and AT may - be clobbered. - - Theory of operation here is that we can use the FPU divider for virtually - all operands that we see: all dividend values between -2**53 and 2**53-1 - can be computed directly. Note that divisor values need not be checked - against that range because the rounded fp value will be close enough such - that the quotient is < 1, which will properly be truncated to zero when we - convert back to integer. - - When the dividend is outside the range for which we can compute exact - results, we use the fp quotent as an estimate from which we begin refining - an exact integral value. This reduces the number of iterations in the - shift-and-subtract loop significantly. - - The FPCR save/restore is due to the fact that the EV6 _will_ set FPCR_INE - for cvttq/c even without /sui being set. It will not, however, properly - raise the exception, so we don't have to worry about FPCR_INED being clear - and so dying by SIGFPE. */ - - .text - .align 4 - .globl __divq - .type __divq, @funcnoplt - .usepv __divq, no - - cfi_startproc - cfi_return_column (RA) -__divq: - lda sp, -FRAME(sp) - cfi_def_cfa_offset (FRAME) - CALL_MCOUNT - - /* Get the fp divide insn issued as quickly as possible. After - that's done, we have at least 22 cycles until its results are - ready -- all the time in the world to figure out how we're - going to use the results. */ - stt $f0, 0(sp) - excb - beq Y, DIVBYZERO - - stt $f1, 8(sp) - stt $f3, 48(sp) - cfi_rel_offset ($f0, 0) - cfi_rel_offset ($f1, 8) - cfi_rel_offset ($f3, 48) - mf_fpcr $f3 - - _ITOFT2 X, $f0, 16, Y, $f1, 24 - cvtqt $f0, $f0 - cvtqt $f1, $f1 - divt/c $f0, $f1, $f0 - - /* Check to see if X fit in the double as an exact value. */ - sll X, (64-53), AT - ldt $f1, 8(sp) - sra AT, (64-53), AT - cmpeq X, AT, AT - beq AT, $x_big - - /* If we get here, we're expecting exact results from the division. - Do nothing else besides convert and clean up. */ - cvttq/c $f0, $f0 - excb - mt_fpcr $f3 - _FTOIT $f0, RV, 16 - - ldt $f0, 0(sp) - ldt $f3, 48(sp) - cfi_restore ($f1) - cfi_remember_state - cfi_restore ($f0) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - lda sp, FRAME(sp) - ret $31, (RA), 1 - - .align 4 - cfi_restore_state -$x_big: - /* If we get here, X is large enough that we don't expect exact - results, and neither X nor Y got mis-translated for the fp - division. Our task is to take the fp result, figure out how - far it's off from the correct result and compute a fixup. */ - stq t0, 16(sp) - stq t1, 24(sp) - stq t2, 32(sp) - stq t5, 40(sp) - cfi_rel_offset (t0, 16) - cfi_rel_offset (t1, 24) - cfi_rel_offset (t2, 32) - cfi_rel_offset (t5, 40) - -#define Q RV /* quotient */ -#define R t0 /* remainder */ -#define SY t1 /* scaled Y */ -#define S t2 /* scalar */ -#define QY t3 /* Q*Y */ - - /* The fixup code below can only handle unsigned values. */ - or X, Y, AT - mov $31, t5 - blt AT, $fix_sign_in -$fix_sign_in_ret1: - cvttq/c $f0, $f0 - - _FTOIT $f0, Q, 8 - .align 3 -$fix_sign_in_ret2: - ldt $f0, 0(sp) - stq t3, 0(sp) - cfi_restore ($f0) - cfi_rel_offset (t3, 0) - - mulq Q, Y, QY - excb - stq t4, 8(sp) - mt_fpcr $f3 - cfi_rel_offset (t4, 8) - - subq QY, X, R - mov Y, SY - mov 1, S - bgt R, $q_high - -$q_high_ret: - subq X, QY, R - mov Y, SY - mov 1, S - bgt R, $q_low - -$q_low_ret: - ldq t0, 16(sp) - ldq t1, 24(sp) - ldq t2, 32(sp) - bne t5, $fix_sign_out - -$fix_sign_out_ret: - ldq t3, 0(sp) - ldq t4, 8(sp) - ldq t5, 40(sp) - ldt $f3, 48(sp) - lda sp, FRAME(sp) - cfi_remember_state - cfi_restore (t0) - cfi_restore (t1) - cfi_restore (t2) - cfi_restore (t3) - cfi_restore (t4) - cfi_restore (t5) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - ret $31, (RA), 1 - - .align 4 - cfi_restore_state - /* The quotient that we computed was too large. We need to reduce - it by S such that Y*S >= R. Obviously the closer we get to the - correct value the better, but overshooting high is ok, as we'll - fix that up later. */ -0: - addq SY, SY, SY - addq S, S, S -$q_high: - cmpult SY, R, AT - bne AT, 0b - - subq Q, S, Q - unop - subq QY, SY, QY - br $q_high_ret - - .align 4 - /* The quotient that we computed was too small. Divide Y by the - current remainder (R) and add that to the existing quotient (Q). - The expectation, of course, is that R is much smaller than X. */ - /* Begin with a shift-up loop. Compute S such that Y*S >= R. We - already have a copy of Y in SY and the value 1 in S. */ -0: - addq SY, SY, SY - addq S, S, S -$q_low: - cmpult SY, R, AT - bne AT, 0b - - /* Shift-down and subtract loop. Each iteration compares our scaled - Y (SY) with the remainder (R); if SY <= R then X is divisible by - Y's scalar (S) so add it to the quotient (Q). */ -2: addq Q, S, t3 - srl S, 1, S - cmpule SY, R, AT - subq R, SY, t4 - - cmovne AT, t3, Q - cmovne AT, t4, R - srl SY, 1, SY - bne S, 2b - - br $q_low_ret - - .align 4 -$fix_sign_in: - /* If we got here, then X|Y is negative. Need to adjust everything - such that we're doing unsigned division in the fixup loop. */ - /* T5 records the changes we had to make: - bit 0: set if result should be negative. - bit 2: set if X was negated. - bit 3: set if Y was negated. - */ - xor X, Y, AT - cmplt AT, 0, t5 - cmplt X, 0, AT - negq X, t0 - - s4addq AT, t5, t5 - cmovne AT, t0, X - cmplt Y, 0, AT - negq Y, t0 - - s8addq AT, t5, t5 - cmovne AT, t0, Y - unop - blbc t5, $fix_sign_in_ret1 - - cvttq/c $f0, $f0 - _FTOIT $f0, Q, 8 - .align 3 - negq Q, Q - br $fix_sign_in_ret2 - - .align 4 -$fix_sign_out: - /* Now we get to undo what we did above. */ - /* ??? Is this really faster than just increasing the size of - the stack frame and storing X and Y in memory? */ - and t5, 8, AT - negq Y, t4 - cmovne AT, t4, Y - - and t5, 4, AT - negq X, t4 - cmovne AT, t4, X - - negq RV, t4 - cmovlbs t5, t4, RV - - br $fix_sign_out_ret - - cfi_endproc - .size __divq, .-__divq - - DO_DIVBYZERO diff --git a/sysdeps/alpha/divqu.S b/sysdeps/alpha/divqu.S deleted file mode 100644 index ef3cdb1b2b..0000000000 --- a/sysdeps/alpha/divqu.S +++ /dev/null @@ -1,257 +0,0 @@ -/* Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "div_libc.h" - - -/* 64-bit unsigned long divide. These are not normal C functions. Argument - registers are t10 and t11, the result goes in t12. Only t12 and AT may be - clobbered. - - Theory of operation here is that we can use the FPU divider for virtually - all operands that we see: all dividend values between -2**53 and 2**53-1 - can be computed directly. Note that divisor values need not be checked - against that range because the rounded fp value will be close enough such - that the quotient is < 1, which will properly be truncated to zero when we - convert back to integer. - - When the dividend is outside the range for which we can compute exact - results, we use the fp quotent as an estimate from which we begin refining - an exact integral value. This reduces the number of iterations in the - shift-and-subtract loop significantly. - - The FPCR save/restore is due to the fact that the EV6 _will_ set FPCR_INE - for cvttq/c even without /sui being set. It will not, however, properly - raise the exception, so we don't have to worry about FPCR_INED being clear - and so dying by SIGFPE. */ - - .text - .align 4 - .globl __divqu - .type __divqu, @funcnoplt - .usepv __divqu, no - - cfi_startproc - cfi_return_column (RA) -__divqu: - lda sp, -FRAME(sp) - cfi_def_cfa_offset (FRAME) - CALL_MCOUNT - - /* Get the fp divide insn issued as quickly as possible. After - that's done, we have at least 22 cycles until its results are - ready -- all the time in the world to figure out how we're - going to use the results. */ - stt $f0, 0(sp) - excb - beq Y, DIVBYZERO - - stt $f1, 8(sp) - stt $f3, 48(sp) - cfi_rel_offset ($f0, 0) - cfi_rel_offset ($f1, 8) - cfi_rel_offset ($f3, 48) - mf_fpcr $f3 - - _ITOFT2 X, $f0, 16, Y, $f1, 24 - cvtqt $f0, $f0 - cvtqt $f1, $f1 - blt X, $x_is_neg - divt/c $f0, $f1, $f0 - - /* Check to see if Y was mis-converted as signed value. */ - ldt $f1, 8(sp) - blt Y, $y_is_neg - - /* Check to see if X fit in the double as an exact value. */ - srl X, 53, AT - bne AT, $x_big - - /* If we get here, we're expecting exact results from the division. - Do nothing else besides convert and clean up. */ - cvttq/c $f0, $f0 - excb - mt_fpcr $f3 - _FTOIT $f0, RV, 16 - - ldt $f0, 0(sp) - ldt $f3, 48(sp) - cfi_remember_state - cfi_restore ($f0) - cfi_restore ($f1) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - lda sp, FRAME(sp) - ret $31, (RA), 1 - - .align 4 - cfi_restore_state -$x_is_neg: - /* If we get here, X is so big that bit 63 is set, which made the - conversion come out negative. Fix it up lest we not even get - a good estimate. */ - ldah AT, 0x5f80 /* 2**64 as float. */ - stt $f2, 24(sp) - cfi_rel_offset ($f2, 24) - _ITOFS AT, $f2, 16 - - .align 4 - addt $f0, $f2, $f0 - unop - divt/c $f0, $f1, $f0 - unop - - /* Ok, we've now the divide issued. Continue with other checks. */ - ldt $f1, 8(sp) - unop - ldt $f2, 24(sp) - blt Y, $y_is_neg - cfi_restore ($f1) - cfi_restore ($f2) - cfi_remember_state /* for y_is_neg */ - - .align 4 -$x_big: - /* If we get here, X is large enough that we don't expect exact - results, and neither X nor Y got mis-translated for the fp - division. Our task is to take the fp result, figure out how - far it's off from the correct result and compute a fixup. */ - stq t0, 16(sp) - stq t1, 24(sp) - stq t2, 32(sp) - stq t3, 40(sp) - cfi_rel_offset (t0, 16) - cfi_rel_offset (t1, 24) - cfi_rel_offset (t2, 32) - cfi_rel_offset (t3, 40) - -#define Q RV /* quotient */ -#define R t0 /* remainder */ -#define SY t1 /* scaled Y */ -#define S t2 /* scalar */ -#define QY t3 /* Q*Y */ - - cvttq/c $f0, $f0 - _FTOIT $f0, Q, 8 - mulq Q, Y, QY - - .align 4 - stq t4, 8(sp) - excb - ldt $f0, 0(sp) - mt_fpcr $f3 - cfi_rel_offset (t4, 8) - cfi_restore ($f0) - - subq QY, X, R - mov Y, SY - mov 1, S - bgt R, $q_high - -$q_high_ret: - subq X, QY, R - mov Y, SY - mov 1, S - bgt R, $q_low - -$q_low_ret: - ldq t4, 8(sp) - ldq t0, 16(sp) - ldq t1, 24(sp) - ldq t2, 32(sp) - - ldq t3, 40(sp) - ldt $f3, 48(sp) - lda sp, FRAME(sp) - cfi_remember_state - cfi_restore (t0) - cfi_restore (t1) - cfi_restore (t2) - cfi_restore (t3) - cfi_restore (t4) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - ret $31, (RA), 1 - - .align 4 - cfi_restore_state - /* The quotient that we computed was too large. We need to reduce - it by S such that Y*S >= R. Obviously the closer we get to the - correct value the better, but overshooting high is ok, as we'll - fix that up later. */ -0: - addq SY, SY, SY - addq S, S, S -$q_high: - cmpult SY, R, AT - bne AT, 0b - - subq Q, S, Q - unop - subq QY, SY, QY - br $q_high_ret - - .align 4 - /* The quotient that we computed was too small. Divide Y by the - current remainder (R) and add that to the existing quotient (Q). - The expectation, of course, is that R is much smaller than X. */ - /* Begin with a shift-up loop. Compute S such that Y*S >= R. We - already have a copy of Y in SY and the value 1 in S. */ -0: - addq SY, SY, SY - addq S, S, S -$q_low: - cmpult SY, R, AT - bne AT, 0b - - /* Shift-down and subtract loop. Each iteration compares our scaled - Y (SY) with the remainder (R); if SY <= R then X is divisible by - Y's scalar (S) so add it to the quotient (Q). */ -2: addq Q, S, t3 - srl S, 1, S - cmpule SY, R, AT - subq R, SY, t4 - - cmovne AT, t3, Q - cmovne AT, t4, R - srl SY, 1, SY - bne S, 2b - - br $q_low_ret - - .align 4 - cfi_restore_state -$y_is_neg: - /* If we get here, Y is so big that bit 63 is set. The results - from the divide will be completely wrong. Fortunately, the - quotient must be either 0 or 1, so just compute it directly. */ - cmpule Y, X, RV - excb - mt_fpcr $f3 - ldt $f0, 0(sp) - ldt $f3, 48(sp) - lda sp, FRAME(sp) - cfi_restore ($f0) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - ret $31, (RA), 1 - - cfi_endproc - .size __divqu, .-__divqu - - DO_DIVBYZERO diff --git a/sysdeps/alpha/dl-dtprocnum.h b/sysdeps/alpha/dl-dtprocnum.h deleted file mode 100644 index 67845cdd62..0000000000 --- a/sysdeps/alpha/dl-dtprocnum.h +++ /dev/null @@ -1,3 +0,0 @@ -/* Number of extra dynamic section entries for this architecture. By - default there are none. */ -#define DT_THISPROCNUM DT_ALPHA_NUM diff --git a/sysdeps/alpha/dl-machine.h b/sysdeps/alpha/dl-machine.h deleted file mode 100644 index 29f500b2d0..0000000000 --- a/sysdeps/alpha/dl-machine.h +++ /dev/null @@ -1,522 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. Alpha version. - Copyright (C) 1996-2005, 2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* This was written in the absence of an ABI -- don't expect - it to remain unchanged. */ - -#ifndef dl_machine_h -#define dl_machine_h 1 - -#define ELF_MACHINE_NAME "alpha" - -#include <string.h> - - -/* Mask identifying addresses reserved for the user program, - where the dynamic linker should not map anything. */ -#define ELF_MACHINE_USER_ADDRESS_MASK 0x120000000UL - -/* Translate a processor specific dynamic tag to the index in l_info array. */ -#define DT_ALPHA(x) (DT_ALPHA_##x - DT_LOPROC + DT_NUM) - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int -elf_machine_matches_host (const Elf64_Ehdr *ehdr) -{ - return ehdr->e_machine == EM_ALPHA; -} - -/* Return the link-time address of _DYNAMIC. The multiple-got-capable - linker no longer allocates the first .got entry for this. But not to - worry, no special tricks are needed. */ -static inline Elf64_Addr -elf_machine_dynamic (void) -{ -#ifndef NO_AXP_MULTI_GOT_LD - return (Elf64_Addr) &_DYNAMIC; -#else - register Elf64_Addr *gp __asm__ ("$29"); - return gp[-4096]; -#endif -} - -/* Return the run-time load address of the shared object. */ - -static inline Elf64_Addr -elf_machine_load_address (void) -{ - /* This relies on the compiler using gp-relative addresses for static symbols. */ - static void *dot = ˙ - return (void *)&dot - dot; -} - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int -elf_machine_runtime_setup (struct link_map *map, int lazy, int profile) -{ - extern char _dl_runtime_resolve_new[] attribute_hidden; - extern char _dl_runtime_profile_new[] attribute_hidden; - extern char _dl_runtime_resolve_old[] attribute_hidden; - extern char _dl_runtime_profile_old[] attribute_hidden; - - struct pltgot { - char *resolve; - struct link_map *link; - }; - - struct pltgot *pg; - long secureplt; - char *resolve; - - if (map->l_info[DT_JMPREL] == 0 || !lazy) - return lazy; - - /* Check to see if we're using the read-only plt form. */ - secureplt = map->l_info[DT_ALPHA(PLTRO)] != 0; - - /* If the binary uses the read-only secure plt format, PG points to - the .got.plt section, which is the right place for ld.so to place - its hooks. Otherwise, PG is currently pointing at the start of - the plt; the hooks go at offset 16. */ - pg = (struct pltgot *) D_PTR (map, l_info[DT_PLTGOT]); - pg += !secureplt; - - /* This function will be called to perform the relocation. They're - not declared as functions to convince the compiler to use gp - relative relocations for them. */ - if (secureplt) - resolve = _dl_runtime_resolve_new; - else - resolve = _dl_runtime_resolve_old; - - if (__builtin_expect (profile, 0)) - { - if (secureplt) - resolve = _dl_runtime_profile_new; - else - resolve = _dl_runtime_profile_old; - - if (GLRO(dl_profile) && _dl_name_match_p (GLRO(dl_profile), map)) - { - /* This is the object we are looking for. Say that we really - want profiling and the timers are started. */ - GL(dl_profile_map) = map; - } - } - - pg->resolve = resolve; - pg->link = map; - - return lazy; -} - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_START asm ("\ - .section .text \n\ - .set at \n\ - .globl _start \n\ - .ent _start \n\ -_start: \n\ - .frame $31,0,$31,0 \n\ - br $gp, 0f \n\ -0: ldgp $gp, 0($gp) \n\ - .prologue 0 \n\ - /* Pass pointer to argument block to _dl_start. */ \n\ - mov $sp, $16 \n\ - bsr $26, _dl_start !samegp \n\ - .end _start \n\ - /* FALLTHRU */ \n\ - .globl _dl_start_user \n\ - .ent _dl_start_user \n\ -_dl_start_user: \n\ - .frame $31,0,$31,0 \n\ - .prologue 0 \n\ - /* Save the user entry point address in s0. */ \n\ - mov $0, $9 \n\ - /* See if we were run as a command with the executable \n\ - file name as an extra leading argument. */ \n\ - ldah $1, _dl_skip_args($gp) !gprelhigh \n\ - ldl $1, _dl_skip_args($1) !gprellow \n\ - bne $1, $fixup_stack \n\ -$fixup_stack_ret: \n\ - /* The special initializer gets called with the stack \n\ - just as the application's entry point will see it; \n\ - it can switch stacks if it moves these contents \n\ - over. */ \n\ -" RTLD_START_SPECIAL_INIT " \n\ - /* Call _dl_init(_dl_loaded, argc, argv, envp) to run \n\ - initializers. */ \n\ - ldah $16, _rtld_local($gp) !gprelhigh \n\ - ldq $16, _rtld_local($16) !gprellow \n\ - ldq $17, 0($sp) \n\ - lda $18, 8($sp) \n\ - s8addq $17, 8, $19 \n\ - addq $19, $18, $19 \n\ - bsr $26, _dl_init_internal !samegp \n\ - /* Pass our finalizer function to the user in $0. */ \n\ - ldah $0, _dl_fini($gp) !gprelhigh \n\ - lda $0, _dl_fini($0) !gprellow \n\ - /* Jump to the user's entry point. */ \n\ - mov $9, $27 \n\ - jmp ($9) \n\ -$fixup_stack: \n\ - /* Adjust the stack pointer to skip _dl_skip_args words.\n\ - This involves copying everything down, since the \n\ - stack pointer must always be 16-byte aligned. */ \n\ - ldah $7, _dl_argv_internal($gp) !gprelhigh \n\ - ldq $2, 0($sp) \n\ - ldq $5, _dl_argv_internal($7) !gprellow \n\ - subq $31, $1, $6 \n\ - subq $2, $1, $2 \n\ - s8addq $6, $5, $5 \n\ - mov $sp, $4 \n\ - s8addq $1, $sp, $3 \n\ - stq $2, 0($sp) \n\ - stq $5, _dl_argv_internal($7) !gprellow \n\ - /* Copy down argv. */ \n\ -0: ldq $5, 8($3) \n\ - addq $4, 8, $4 \n\ - addq $3, 8, $3 \n\ - stq $5, 0($4) \n\ - bne $5, 0b \n\ - /* Copy down envp. */ \n\ -1: ldq $5, 8($3) \n\ - addq $4, 8, $4 \n\ - addq $3, 8, $3 \n\ - stq $5, 0($4) \n\ - bne $5, 1b \n\ - /* Copy down auxiliary table. */ \n\ -2: ldq $5, 8($3) \n\ - ldq $6, 16($3) \n\ - addq $4, 16, $4 \n\ - addq $3, 16, $3 \n\ - stq $5, -8($4) \n\ - stq $6, 0($4) \n\ - bne $5, 2b \n\ - br $fixup_stack_ret \n\ - .end _dl_start_user \n\ - .set noat \n\ -.previous"); - -#ifndef RTLD_START_SPECIAL_INIT -#define RTLD_START_SPECIAL_INIT /* nothing */ -#endif - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry - or TLS variables, so undefined references should not be allowed - to define the value. - - ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve - to one of the main executable's symbols, as for a COPY reloc. - This is unused on Alpha. */ - -#if !defined RTLD_BOOTSTRAP || USE___THREAD -# define elf_machine_type_class(type) \ - (((type) == R_ALPHA_JMP_SLOT \ - || (type) == R_ALPHA_DTPMOD64 \ - || (type) == R_ALPHA_DTPREL64 \ - || (type) == R_ALPHA_TPREL64) * ELF_RTYPE_CLASS_PLT) -#else -# define elf_machine_type_class(type) \ - (((type) == R_ALPHA_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) -#endif - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_ALPHA_JMP_SLOT - -/* The alpha never uses Elf64_Rel relocations. */ -#define ELF_MACHINE_NO_REL 1 - -/* Fix up the instructions of a PLT entry to invoke the function - rather than the dynamic linker. */ -static inline Elf64_Addr -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf64_Rela *reloc, - Elf64_Addr *got_addr, Elf64_Addr value) -{ - const Elf64_Rela *rela_plt; - Elf64_Word *plte; - long int edisp; - - /* Store the value we are going to load. */ - *got_addr = value; - - /* If this binary uses the read-only secure plt format, we're done. */ - if (map->l_info[DT_ALPHA(PLTRO)]) - return value; - - /* Otherwise we have to modify the plt entry in place to do the branch. */ - - /* Recover the PLT entry address by calculating reloc's index into the - .rela.plt, and finding that entry in the .plt. */ - rela_plt = (const Elf64_Rela *) D_PTR (map, l_info[DT_JMPREL]); - plte = (Elf64_Word *) (D_PTR (map, l_info[DT_PLTGOT]) + 32); - plte += 3 * (reloc - rela_plt); - - /* Find the displacement from the plt entry to the function. */ - edisp = (long int) (value - (Elf64_Addr)&plte[3]) / 4; - - if (edisp >= -0x100000 && edisp < 0x100000) - { - /* If we are in range, use br to perfect branch prediction and - elide the dependency on the address load. This case happens, - e.g., when a shared library call is resolved to the same library. */ - - int hi, lo; - hi = value - (Elf64_Addr)&plte[0]; - lo = (short int) hi; - hi = (hi - lo) >> 16; - - /* Emit "lda $27,lo($27)" */ - plte[1] = 0x237b0000 | (lo & 0xffff); - - /* Emit "br $31,function" */ - plte[2] = 0xc3e00000 | (edisp & 0x1fffff); - - /* Think about thread-safety -- the previous instructions must be - committed to memory before the first is overwritten. */ - __asm__ __volatile__("wmb" : : : "memory"); - - /* Emit "ldah $27,hi($27)" */ - plte[0] = 0x277b0000 | (hi & 0xffff); - } - else - { - /* Don't bother with the hint since we already know the hint is - wrong. Eliding it prevents the wrong page from getting pulled - into the cache. */ - - int hi, lo; - hi = (Elf64_Addr)got_addr - (Elf64_Addr)&plte[0]; - lo = (short)hi; - hi = (hi - lo) >> 16; - - /* Emit "ldq $27,lo($27)" */ - plte[1] = 0xa77b0000 | (lo & 0xffff); - - /* Emit "jmp $31,($27)" */ - plte[2] = 0x6bfb0000; - - /* Think about thread-safety -- the previous instructions must be - committed to memory before the first is overwritten. */ - __asm__ __volatile__("wmb" : : : "memory"); - - /* Emit "ldah $27,hi($27)" */ - plte[0] = 0x277b0000 | (hi & 0xffff); - } - - /* At this point, if we've been doing runtime resolution, Icache is dirty. - This will be taken care of in _dl_runtime_resolve. If instead we are - doing this as part of non-lazy startup relocation, that bit of code - hasn't made it into Icache yet, so there's nothing to clean up. */ - - return value; -} - -/* Return the final value of a plt relocation. */ -static inline Elf64_Addr -elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc, - Elf64_Addr value) -{ - return value + reloc->r_addend; -} - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER alpha_gnu_pltenter -#define ARCH_LA_PLTEXIT alpha_gnu_pltexit - -#endif /* !dl_machine_h */ - -#ifdef RESOLVE_MAP - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - MAP is the object containing the reloc. */ -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, - const Elf64_Rela *reloc, - const Elf64_Sym *sym, - const struct r_found_version *version, - void *const reloc_addr_arg) -{ - Elf64_Addr *const reloc_addr = reloc_addr_arg; - unsigned long int const r_type = ELF64_R_TYPE (reloc->r_info); - -#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC && !defined SHARED - /* This is defined in rtld.c, but nowhere in the static libc.a; make the - reference weak so static programs can still link. This declaration - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) - because rtld.c contains the common defn for _dl_rtld_map, which is - incompatible with a weak decl in the same file. */ - weak_extern (_dl_rtld_map); -#endif - - /* We cannot use a switch here because we cannot locate the switch - jump table until we've self-relocated. */ - -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC - if (__builtin_expect (r_type == R_ALPHA_RELATIVE, 0)) - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* Already done in dynamic linker. */ - if (map != &GL(dl_rtld_map)) -# endif - { - /* XXX Make some timings. Maybe it's preferable to test for - unaligned access and only do it the complex way if necessary. */ - Elf64_Addr reloc_addr_val; - - /* Load value without causing unaligned trap. */ - memcpy (&reloc_addr_val, reloc_addr_arg, 8); - reloc_addr_val += map->l_addr; - - /* Store value without causing unaligned trap. */ - memcpy (reloc_addr_arg, &reloc_addr_val, 8); - } - } - else -#endif - if (__builtin_expect (r_type == R_ALPHA_NONE, 0)) - return; - else - { - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - Elf64_Addr sym_value; - Elf64_Addr sym_raw_value; - - sym_raw_value = sym_value = reloc->r_addend; - if (sym_map) - { - sym_raw_value += sym->st_value; - sym_value = sym_raw_value + sym_map->l_addr; - } - - if (r_type == R_ALPHA_GLOB_DAT) - *reloc_addr = sym_value; -#ifdef RESOLVE_CONFLICT_FIND_MAP - /* In .gnu.conflict section, R_ALPHA_JMP_SLOT relocations have - R_ALPHA_JMP_SLOT in lower 8 bits and the remaining 24 bits - are .rela.plt index. */ - else if ((r_type & 0xff) == R_ALPHA_JMP_SLOT) - { - /* elf_machine_fixup_plt needs the map reloc_addr points into, - while in _dl_resolve_conflicts map is _dl_loaded. */ - RESOLVE_CONFLICT_FIND_MAP (map, reloc_addr); - reloc = ((const Elf64_Rela *) D_PTR (map, l_info[DT_JMPREL])) - + (r_type >> 8); - elf_machine_fixup_plt (map, 0, reloc, reloc_addr, sym_value); - } -#else - else if (r_type == R_ALPHA_JMP_SLOT) - elf_machine_fixup_plt (map, 0, reloc, reloc_addr, sym_value); -#endif -#ifndef RTLD_BOOTSTRAP - else if (r_type == R_ALPHA_REFQUAD) - { - /* Store value without causing unaligned trap. */ - memcpy (reloc_addr_arg, &sym_value, 8); - } -#endif -#if !defined RTLD_BOOTSTRAP || USE___THREAD - else if (r_type == R_ALPHA_DTPMOD64) - { -# ifdef RTLD_BOOTSTRAP - /* During startup the dynamic linker is always index 1. */ - *reloc_addr = 1; -# else - /* Get the information from the link map returned by the - resolv function. */ - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; -# endif - } - else if (r_type == R_ALPHA_DTPREL64) - { -# ifndef RTLD_BOOTSTRAP - /* During relocation all TLS symbols are defined and used. - Therefore the offset is already correct. */ - *reloc_addr = sym_raw_value; -# endif - } - else if (r_type == R_ALPHA_TPREL64) - { -# ifdef RTLD_BOOTSTRAP - *reloc_addr = sym_raw_value + map->l_tls_offset; -# else - if (sym_map) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = sym_raw_value + sym_map->l_tls_offset; - } -# endif - } -#endif - else - _dl_reloc_bad_type (map, r_type, 0); - } -} - -/* Let do-rel.h know that on Alpha if l_addr is 0, all RELATIVE relocs - can be skipped. */ -#define ELF_MACHINE_REL_RELATIVE 1 - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc, - void *const reloc_addr_arg) -{ - /* XXX Make some timings. Maybe it's preferable to test for - unaligned access and only do it the complex way if necessary. */ - Elf64_Addr reloc_addr_val; - - /* Load value without causing unaligned trap. */ - memcpy (&reloc_addr_val, reloc_addr_arg, 8); - reloc_addr_val += l_addr; - - /* Store value without causing unaligned trap. */ - memcpy (reloc_addr_arg, &reloc_addr_val, 8); -} - -auto inline void -__attribute__ ((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - Elf64_Addr l_addr, const Elf64_Rela *reloc) -{ - Elf64_Addr * const reloc_addr = (void *)(l_addr + reloc->r_offset); - unsigned long int const r_type = ELF64_R_TYPE (reloc->r_info); - - if (r_type == R_ALPHA_JMP_SLOT) - { - /* Perform a RELATIVE reloc on the .got entry that transfers - to the .plt. */ - *reloc_addr += l_addr; - } - else if (r_type == R_ALPHA_NONE) - return; - else - _dl_reloc_bad_type (map, r_type, 1); -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/alpha/dl-sysdep.h b/sysdeps/alpha/dl-sysdep.h deleted file mode 100644 index cd678f4e43..0000000000 --- a/sysdeps/alpha/dl-sysdep.h +++ /dev/null @@ -1,24 +0,0 @@ -/* System-specific settings for dynamic linker code. Alpha version. - Copyright (C) 2002, 2003, 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include_next <dl-sysdep.h> - -/* _dl_argv cannot be attribute_relro, because _dl_start_user - might write into it after _dl_start returns. */ -#define DL_ARGV_NOT_RELRO 1 diff --git a/sysdeps/alpha/dl-tls.h b/sysdeps/alpha/dl-tls.h deleted file mode 100644 index f81f95d75e..0000000000 --- a/sysdeps/alpha/dl-tls.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. Alpha version. - Copyright (C) 2002 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - - -extern void *__tls_get_addr (tls_index *ti); diff --git a/sysdeps/alpha/dl-trampoline.S b/sysdeps/alpha/dl-trampoline.S deleted file mode 100644 index c52efbb3bc..0000000000 --- a/sysdeps/alpha/dl-trampoline.S +++ /dev/null @@ -1,541 +0,0 @@ -/* PLT trampolines. Alpha version. - Copyright (C) 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> - - .set noat - -.macro savei regno, offset - stq $\regno, \offset($30) - cfi_rel_offset(\regno, \offset) -.endm - -.macro savef regno, offset - stt $f\regno, \offset($30) - cfi_rel_offset(\regno+32, \offset) -.endm - - .align 4 - .globl _dl_runtime_resolve_new - .ent _dl_runtime_resolve_new - -#undef FRAMESIZE -#define FRAMESIZE 14*8 - -_dl_runtime_resolve_new: - .frame $30, FRAMESIZE, $26, 0 - .mask 0x4000000, 0 - - ldah $29, 0($27) !gpdisp!1 - lda $30, -FRAMESIZE($30) - stq $26, 0*8($30) - stq $16, 2*8($30) - - stq $17, 3*8($30) - lda $29, 0($29) !gpdisp!1 - stq $18, 4*8($30) - mov $28, $16 /* link_map from .got.plt */ - - stq $19, 5*8($30) - mov $25, $17 /* offset of reloc entry */ - stq $20, 6*8($30) - mov $26, $18 /* return address */ - - stq $21, 7*8($30) - stt $f16, 8*8($30) - stt $f17, 9*8($30) - stt $f18, 10*8($30) - - stt $f19, 11*8($30) - stt $f20, 12*8($30) - stt $f21, 13*8($30) - .prologue 2 - - bsr $26, _dl_fixup !samegp - mov $0, $27 - - ldq $26, 0*8($30) - ldq $16, 2*8($30) - ldq $17, 3*8($30) - ldq $18, 4*8($30) - ldq $19, 5*8($30) - ldq $20, 6*8($30) - ldq $21, 7*8($30) - ldt $f16, 8*8($30) - ldt $f17, 9*8($30) - ldt $f18, 10*8($30) - ldt $f19, 11*8($30) - ldt $f20, 12*8($30) - ldt $f21, 13*8($30) - lda $30, FRAMESIZE($30) - jmp $31, ($27), 0 - .end _dl_runtime_resolve_new - - .globl _dl_runtime_profile_new - .type _dl_runtime_profile_new, @function - -#undef FRAMESIZE -#define FRAMESIZE 20*8 - - /* We save the registers in a different order than desired by - .mask/.fmask, so we have to use explicit cfi directives. */ - cfi_startproc - -_dl_runtime_profile_new: - ldah $29, 0($27) !gpdisp!2 - lda $30, -FRAMESIZE($30) - savei 26, 0*8 - stq $16, 2*8($30) - - stq $17, 3*8($30) - lda $29, 0($29) !gpdisp!2 - stq $18, 4*8($30) - lda $1, FRAMESIZE($30) /* incoming sp value */ - - stq $1, 1*8($30) - stq $19, 5*8($30) - stq $20, 6*8($30) - mov $28, $16 /* link_map from .got.plt */ - - stq $21, 7*8($30) - mov $25, $17 /* offset of reloc entry */ - stt $f16, 8*8($30) - mov $26, $18 /* return address */ - - stt $f17, 9*8($30) - mov $30, $19 /* La_alpha_regs address */ - stt $f18, 10*8($30) - lda $20, 14*8($30) /* framesize address */ - - stt $f19, 11*8($30) - stt $f20, 12*8($30) - stt $f21, 13*8($30) - stq $28, 16*8($30) - stq $25, 17*8($30) - - bsr $26, _dl_profile_fixup !samegp - mov $0, $27 - - /* Discover if we're wrapping this call. */ - ldq $18, 14*8($30) - bge $18, 1f - - ldq $26, 0*8($30) - ldq $16, 2*8($30) - ldq $17, 3*8($30) - ldq $18, 4*8($30) - ldq $19, 5*8($30) - ldq $20, 6*8($30) - ldq $21, 7*8($30) - ldt $f16, 8*8($30) - ldt $f17, 9*8($30) - ldt $f18, 10*8($30) - ldt $f19, 11*8($30) - ldt $f20, 12*8($30) - ldt $f21, 13*8($30) - lda $30, FRAMESIZE($30) - jmp $31, ($27), 0 - -1: - /* Create a frame pointer and allocate a new argument frame. */ - savei 15, 15*8 - mov $30, $15 - cfi_def_cfa_register (15) - addq $18, 15, $18 - bic $18, 15, $18 - subq $30, $18, $30 - - /* Save the call destination around memcpy. */ - stq $0, 14*8($30) - - /* Copy the stack arguments into place. */ - lda $16, 0($30) - lda $17, FRAMESIZE($15) - jsr $26, memcpy - ldgp $29, 0($26) - - /* Reload the argument registers. */ - ldq $27, 14*8($30) - ldq $16, 2*8($15) - ldq $17, 3*8($15) - ldq $18, 4*8($15) - ldq $19, 5*8($15) - ldq $20, 6*8($15) - ldq $21, 7*8($15) - ldt $f16, 8*8($15) - ldt $f17, 9*8($15) - ldt $f18, 10*8($15) - ldt $f19, 11*8($15) - ldt $f20, 12*8($15) - ldt $f21, 13*8($15) - - jsr $26, ($27), 0 - ldgp $29, 0($26) - - /* Set up for call to _dl_call_pltexit. */ - ldq $16, 16*8($15) - ldq $17, 17*8($15) - stq $0, 16*8($15) - lda $18, 0($15) - stq $1, 17*8($15) - lda $19, 16*8($15) - stt $f0, 18*8($15) - stt $f1, 19*8($15) - bsr $26, _dl_call_pltexit !samegp - - mov $15, $30 - cfi_def_cfa_register (30) - ldq $26, 0($30) - ldq $15, 15*8($30) - lda $30, FRAMESIZE($30) - ret - - cfi_endproc - .size _dl_runtime_profile_new, .-_dl_runtime_profile_new - - .align 4 - .globl _dl_runtime_resolve_old - .ent _dl_runtime_resolve_old - -#undef FRAMESIZE -#define FRAMESIZE 44*8 - -_dl_runtime_resolve_old: - lda $30, -FRAMESIZE($30) - .frame $30, FRAMESIZE, $26 - /* Preserve all registers that C normally doesn't. */ - stq $26, 0*8($30) - stq $0, 1*8($30) - stq $1, 2*8($30) - stq $2, 3*8($30) - stq $3, 4*8($30) - stq $4, 5*8($30) - stq $5, 6*8($30) - stq $6, 7*8($30) - stq $7, 8*8($30) - stq $8, 9*8($30) - stq $16, 10*8($30) - stq $17, 11*8($30) - stq $18, 12*8($30) - stq $19, 13*8($30) - stq $20, 14*8($30) - stq $21, 15*8($30) - stq $22, 16*8($30) - stq $23, 17*8($30) - stq $24, 18*8($30) - stq $25, 19*8($30) - stq $29, 20*8($30) - stt $f0, 21*8($30) - stt $f1, 22*8($30) - stt $f10, 23*8($30) - stt $f11, 24*8($30) - stt $f12, 25*8($30) - stt $f13, 26*8($30) - stt $f14, 27*8($30) - stt $f15, 28*8($30) - stt $f16, 29*8($30) - stt $f17, 30*8($30) - stt $f18, 31*8($30) - stt $f19, 32*8($30) - stt $f20, 33*8($30) - stt $f21, 34*8($30) - stt $f22, 35*8($30) - stt $f23, 36*8($30) - stt $f24, 37*8($30) - stt $f25, 38*8($30) - stt $f26, 39*8($30) - stt $f27, 40*8($30) - stt $f28, 41*8($30) - stt $f29, 42*8($30) - stt $f30, 43*8($30) - .mask 0x27ff01ff, -FRAMESIZE - .fmask 0xfffffc03, -FRAMESIZE+21*8 - /* Set up our GP. */ - br $29, .+4 - ldgp $29, 0($29) - .prologue 0 - /* Set up the arguments for _dl_fixup: - $16 = link_map out of plt0 - $17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24 - $18 = return address - */ - subq $28, $27, $17 - ldq $16, 8($27) - subq $17, 20, $17 - mov $26, $18 - addq $17, $17, $17 - bsr $26, _dl_fixup !samegp - - /* Move the destination address into position. */ - mov $0, $27 - /* Restore program registers. */ - ldq $26, 0*8($30) - ldq $0, 1*8($30) - ldq $1, 2*8($30) - ldq $2, 3*8($30) - ldq $3, 4*8($30) - ldq $4, 5*8($30) - ldq $5, 6*8($30) - ldq $6, 7*8($30) - ldq $7, 8*8($30) - ldq $8, 9*8($30) - ldq $16, 10*8($30) - ldq $17, 11*8($30) - ldq $18, 12*8($30) - ldq $19, 13*8($30) - ldq $20, 14*8($30) - ldq $21, 15*8($30) - ldq $22, 16*8($30) - ldq $23, 17*8($30) - ldq $24, 18*8($30) - ldq $25, 19*8($30) - ldq $29, 20*8($30) - ldt $f0, 21*8($30) - ldt $f1, 22*8($30) - ldt $f10, 23*8($30) - ldt $f11, 24*8($30) - ldt $f12, 25*8($30) - ldt $f13, 26*8($30) - ldt $f14, 27*8($30) - ldt $f15, 28*8($30) - ldt $f16, 29*8($30) - ldt $f17, 30*8($30) - ldt $f18, 31*8($30) - ldt $f19, 32*8($30) - ldt $f20, 33*8($30) - ldt $f21, 34*8($30) - ldt $f22, 35*8($30) - ldt $f23, 36*8($30) - ldt $f24, 37*8($30) - ldt $f25, 38*8($30) - ldt $f26, 39*8($30) - ldt $f27, 40*8($30) - ldt $f28, 41*8($30) - ldt $f29, 42*8($30) - ldt $f30, 43*8($30) - /* Flush the Icache after having modified the .plt code. */ - imb - /* Clean up and turn control to the destination */ - lda $30, FRAMESIZE($30) - jmp $31, ($27) - - .end _dl_runtime_resolve_old - - .globl _dl_runtime_profile_old - .usepv _dl_runtime_profile_old, no - .type _dl_runtime_profile_old, @function - - /* We save the registers in a different order than desired by - .mask/.fmask, so we have to use explicit cfi directives. */ - cfi_startproc - -#undef FRAMESIZE -#define FRAMESIZE 50*8 - - .align 4 -_dl_runtime_profile_old: - lda $30, -FRAMESIZE($30) - cfi_adjust_cfa_offset (FRAMESIZE) - - /* Preserve all argument registers. This also constructs the - La_alpha_regs structure. */ - savei 26, 0*8 - savei 16, 2*8 - savei 17, 3*8 - savei 18, 4*8 - savei 19, 5*8 - savei 20, 6*8 - savei 21, 7*8 - lda $16, FRAMESIZE($30) - savef 16, 8*8 - savef 17, 9*8 - savef 18, 10*8 - savef 19, 11*8 - savef 20, 12*8 - savef 21, 13*8 - stq $16, 1*8($30) - - /* Preserve all registers that C normally doesn't. */ - savei 0, 14*8 - savei 1, 15*8 - savei 2, 16*8 - savei 3, 17*8 - savei 4, 18*8 - savei 5, 19*8 - savei 6, 20*8 - savei 7, 21*8 - savei 8, 22*8 - savei 22, 23*8 - savei 23, 24*8 - savei 24, 25*8 - savei 25, 26*8 - savei 29, 27*8 - savef 0, 28*8 - savef 1, 29*8 - savef 10, 30*8 - savef 11, 31*8 - savef 12, 32*8 - savef 13, 33*8 - savef 14, 34*8 - savef 15, 35*8 - savef 22, 36*8 - savef 23, 37*8 - savef 24, 38*8 - savef 25, 39*8 - savef 26, 40*8 - savef 27, 41*8 - savef 28, 42*8 - savef 29, 43*8 - savef 30, 44*8 - - /* Set up our GP. */ - br $29, .+4 - ldgp $29, 0($29) - - /* Set up the arguments for _dl_profile_fixup: - $16 = link_map out of plt0 - $17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24 - $18 = return address - $19 = La_alpha_regs address - $20 = framesize address - */ - subq $28, $27, $17 - ldq $16, 8($27) - subq $17, 20, $17 - mov $26, $18 - addq $17, $17, $17 - lda $19, 0($30) - lda $20, 45*8($30) - stq $16, 48*8($30) - stq $17, 49*8($30) - - bsr $26, _dl_profile_fixup !samegp - - /* Discover if we're wrapping this call. */ - ldq $18, 45*8($30) - bge $18, 1f - - /* Move the destination address into position. */ - mov $0, $27 - /* Restore program registers. */ - ldq $26, 0*8($30) - ldq $16, 2*8($30) - ldq $17, 3*8($30) - ldq $18, 4*8($30) - ldq $19, 5*8($30) - ldq $20, 6*8($30) - ldq $21, 7*8($30) - ldt $f16, 8*8($30) - ldt $f17, 9*8($30) - ldt $f18, 10*8($30) - ldt $f19, 11*8($30) - ldt $f20, 12*8($30) - ldt $f21, 13*8($30) - ldq $0, 14*8($30) - ldq $1, 15*8($30) - ldq $2, 16*8($30) - ldq $3, 17*8($30) - ldq $4, 18*8($30) - ldq $5, 19*8($30) - ldq $6, 20*8($30) - ldq $7, 21*8($30) - ldq $8, 22*8($30) - ldq $22, 23*8($30) - ldq $23, 24*8($30) - ldq $24, 25*8($30) - ldq $25, 26*8($30) - ldq $29, 27*8($30) - ldt $f0, 28*8($30) - ldt $f1, 29*8($30) - ldt $f10, 30*8($30) - ldt $f11, 31*8($30) - ldt $f12, 32*8($30) - ldt $f13, 33*8($30) - ldt $f14, 34*8($30) - ldt $f15, 35*8($30) - ldt $f22, 36*8($30) - ldt $f23, 37*8($30) - ldt $f24, 38*8($30) - ldt $f25, 39*8($30) - ldt $f26, 40*8($30) - ldt $f27, 41*8($30) - ldt $f28, 42*8($30) - ldt $f29, 43*8($30) - ldt $f30, 44*8($30) - - /* Clean up and turn control to the destination. */ - lda $30, FRAMESIZE($30) - jmp $31, ($27) - -1: - /* Create a frame pointer and allocate a new argument frame. */ - savei 15, 45*8 - mov $30, $15 - cfi_def_cfa_register (15) - addq $18, 15, $18 - bic $18, 15, $18 - subq $30, $18, $30 - - /* Save the call destination around memcpy. */ - stq $0, 46*8($30) - - /* Copy the stack arguments into place. */ - lda $16, 0($30) - lda $17, FRAMESIZE($15) - jsr $26, memcpy - ldgp $29, 0($26) - - /* Reload the argument registers. */ - ldq $27, 46*8($30) - ldq $16, 2*8($15) - ldq $17, 3*8($15) - ldq $18, 4*8($15) - ldq $19, 5*8($15) - ldq $20, 6*8($15) - ldq $21, 7*8($15) - ldt $f16, 8*8($15) - ldt $f17, 9*8($15) - ldt $f18, 10*8($15) - ldt $f19, 11*8($15) - ldt $f20, 12*8($15) - ldt $f21, 13*8($15) - - jsr $26, ($27), 0 - ldgp $29, 0($26) - - /* Set up for call to _dl_call_pltexit. */ - ldq $16, 48*8($15) - ldq $17, 49*8($15) - stq $0, 46*8($15) - lda $18, 0($15) - stq $1, 47*8($15) - lda $19, 46*8($15) - stt $f0, 48*8($15) - stt $f1, 49*8($15) - bsr $26, _dl_call_pltexit !samegp - - mov $15, $30 - cfi_def_cfa_register (30) - ldq $26, 0($30) - ldq $15, 45*8($30) - lda $30, FRAMESIZE($30) - ret - - cfi_endproc - .size _dl_runtime_profile_old, .-_dl_runtime_profile_old diff --git a/sysdeps/alpha/elf/configure b/sysdeps/alpha/elf/configure deleted file mode 100755 index ea99e35416..0000000000 --- a/sysdeps/alpha/elf/configure +++ /dev/null @@ -1,106 +0,0 @@ -# This file is generated from configure.in by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/alpha/elf. - -if test "$usetls" != no; then -# Check for support of thread-local storage handling in assembler and -# linker. -echo "$as_me:$LINENO: checking for Alpha TLS support" >&5 -echo $ECHO_N "checking for Alpha TLS support... $ECHO_C" >&6 -if test "${libc_cv_alpha_tls+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat > conftest.s <<\EOF - .section ".tdata", "awT", @progbits - .globl foo -foo: .quad 1 - .section ".tbss", "awT", @nobits - .globl bar -bar: .skip 8 - .text -baz: - .set nomacro - ldq $27, __tls_get_addr($29) !literal!1 - ldq $16, a($29) !tlsgd!1 - jsr $26, ($27), __tls_get_addr !lituse_tlsgd!1 - - jsr $26, ($27), __tls_get_addr !lituse_tlsldm!2 - ldq $27, __tls_get_addr($29) !literal!2 - ldq $16, b($29) !tlsldm!2 - - ldq $16, c($29) !tlsgd - ldq $16, d($29) !tlsldm - - ldq $16, e($29) !tlsgd!3 - ldq $16, f($29) !tlsldm!4 - - ldq $16, g($29) !gotdtprel - ldah $16, h($31) !dtprelhi - lda $16, i($16) !dtprello - lda $16, j($31) !dtprel - - ldq $16, k($29) !gottprel - ldah $16, l($31) !tprelhi - lda $16, m($16) !tprello - lda $16, n($31) !tprel -EOF -if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - libc_cv_alpha_tls=yes -else - libc_cv_alpha_tls=no -fi -rm -f conftest* -fi -echo "$as_me:$LINENO: result: $libc_cv_alpha_tls" >&5 -echo "${ECHO_T}$libc_cv_alpha_tls" >&6 -if test $libc_cv_alpha_tls = yes; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_TLS_SUPPORT 1 -_ACEOF - -fi -fi - -echo "$as_me:$LINENO: checking for GP relative module local relocs" >&5 -echo $ECHO_N "checking for GP relative module local relocs... $ECHO_C" >&6 -if test "${libc_cv_alpha_hidden_gprel+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat > conftest.c <<\EOF -static int bar; -int baz __attribute__((visibility("hidden"))); - -int foo (void) -{ - return bar + baz; -} -EOF - -libc_cv_alpha_hidden_gprel=no -if { ac_try='${CC-cc} -S $CFLAGS -O2 -fpic conftest.c 1>&5' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - if grep -q 'bar.*!gprel' conftest.s \ - && grep -q 'baz.*!gprel' conftest.s \ - && ! grep -q 'bar.*!literal' conftest.s \ - && ! grep -q 'baz.*!literal' conftest.s; then - libc_cv_alpha_hidden_gprel=yes - fi -fi -rm -f conftest* -fi -echo "$as_me:$LINENO: result: $libc_cv_alpha_hidden_gprel" >&5 -echo "${ECHO_T}$libc_cv_alpha_hidden_gprel" >&6 -if test $libc_cv_alpha_hidden_gprel = yes; then - cat >>confdefs.h <<\_ACEOF -#define PI_STATIC_AND_HIDDEN 1 -_ACEOF - -fi diff --git a/sysdeps/alpha/elf/configure.in b/sysdeps/alpha/elf/configure.in deleted file mode 100644 index 7986814548..0000000000 --- a/sysdeps/alpha/elf/configure.in +++ /dev/null @@ -1,78 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/alpha/elf. - -if test "$usetls" != no; then -# Check for support of thread-local storage handling in assembler and -# linker. -AC_CACHE_CHECK(for Alpha TLS support, libc_cv_alpha_tls, [dnl -cat > conftest.s <<\EOF - .section ".tdata", "awT", @progbits - .globl foo -foo: .quad 1 - .section ".tbss", "awT", @nobits - .globl bar -bar: .skip 8 - .text -baz: - .set nomacro - ldq $27, __tls_get_addr($29) !literal!1 - ldq $16, a($29) !tlsgd!1 - jsr $26, ($27), __tls_get_addr !lituse_tlsgd!1 - - jsr $26, ($27), __tls_get_addr !lituse_tlsldm!2 - ldq $27, __tls_get_addr($29) !literal!2 - ldq $16, b($29) !tlsldm!2 - - ldq $16, c($29) !tlsgd - ldq $16, d($29) !tlsldm - - ldq $16, e($29) !tlsgd!3 - ldq $16, f($29) !tlsldm!4 - - ldq $16, g($29) !gotdtprel - ldah $16, h($31) !dtprelhi - lda $16, i($16) !dtprello - lda $16, j($31) !dtprel - - ldq $16, k($29) !gottprel - ldah $16, l($31) !tprelhi - lda $16, m($16) !tprello - lda $16, n($31) !tprel -EOF -dnl -if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then - libc_cv_alpha_tls=yes -else - libc_cv_alpha_tls=no -fi -rm -f conftest*]) -if test $libc_cv_alpha_tls = yes; then - AC_DEFINE(HAVE_TLS_SUPPORT) -fi -fi - -AC_CACHE_CHECK(for GP relative module local relocs, libc_cv_alpha_hidden_gprel, [dnl -cat > conftest.c <<\EOF -static int bar; -int baz __attribute__((visibility("hidden"))); - -int foo (void) -{ - return bar + baz; -} -EOF -dnl - -libc_cv_alpha_hidden_gprel=no -if AC_TRY_COMMAND(${CC-cc} -S $CFLAGS -O2 -fpic conftest.c 1>&AS_MESSAGE_LOG_FD); then - if grep -q 'bar.*!gprel' conftest.s \ - && grep -q 'baz.*!gprel' conftest.s \ - && ! grep -q 'bar.*!literal' conftest.s \ - && ! grep -q 'baz.*!literal' conftest.s; then - libc_cv_alpha_hidden_gprel=yes - fi -fi -rm -f conftest*]) -if test $libc_cv_alpha_hidden_gprel = yes; then - AC_DEFINE(PI_STATIC_AND_HIDDEN) -fi diff --git a/sysdeps/alpha/elf/initfini.c b/sysdeps/alpha/elf/initfini.c deleted file mode 100644 index 4d3342db9b..0000000000 --- a/sysdeps/alpha/elf/initfini.c +++ /dev/null @@ -1,110 +0,0 @@ -/* Special .init and .fini section support for Alpha. - Copyright (C) 2001, 2002, 2003 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* This file is compiled into assembly code which is then munged by a sed - script into two files: crti.s and crtn.s. - - * crti.s puts a function prologue at the beginning of the .init and .fini - sections and defines global symbols for those addresses, so they can be - called as functions. - - * crtn.s puts the corresponding function epilogues in the .init and .fini - sections. - - This differs from what would be generated by the generic code in that - we save and restore the GP within the function. In order for linker - relaxation to work, the value in the GP register on exit from a function - must be valid for the function entry point. Normally, a function is - contained within one object file and this is not an issue, provided - that the function reloads the gp after making any function calls. - However, _init and _fini are constructed from pieces of many object - files, all of which may have different GP values. So we must reload - the GP value from crti.o in crtn.o. */ - -__asm__ (" \n\ -#include \"defs.h\" \n\ - \n\ -/*@HEADER_ENDS*/ \n\ - \n\ -/*@_init_PROLOG_BEGINS*/ \n\ - .section .init, \"ax\", @progbits \n\ - .globl _init \n\ - .type _init, @function \n\ - .usepv _init, std \n\ -_init: \n\ - ldgp $29, 0($27) \n\ - subq $30, 16, $30 \n\ - lda $27, __gmon_start__ \n\ - stq $26, 0($30) \n\ - stq $29, 8($30) \n\ - beq $27, 1f \n\ - jsr $26, ($27), __gmon_start__ \n\ - ldq $29, 8($30) \n\ - .align 3 \n\ -1: \n\ -/*@_init_PROLOG_ENDS*/ \n\ - \n\ -/*@_init_EPILOG_BEGINS*/ \n\ - .section .init, \"ax\", @progbits \n\ - ldq $26, 0($30) \n\ - ldq $29, 8($30) \n\ - addq $30, 16, $30 \n\ - ret \n\ -/*@_init_EPILOG_ENDS*/ \n\ - \n\ -/*@_fini_PROLOG_BEGINS*/ \n\ - .section .fini, \"ax\", @progbits \n\ - .globl _fini \n\ - .type _fini,@function \n\ - .usepv _fini,std \n\ -_fini: \n\ - ldgp $29, 0($27) \n\ - subq $30, 16, $30 \n\ - stq $26, 0($30) \n\ - stq $29, 8($30) \n\ - .align 3 \n\ -/*@_fini_PROLOG_ENDS*/ \n\ - \n\ -/*@_fini_EPILOG_BEGINS*/ \n\ - .section .fini, \"ax\", @progbits \n\ - ldq $26, 0($30) \n\ - ldq $29, 8($30) \n\ - addq $30, 16, $30 \n\ - ret \n\ -/*@_fini_EPILOG_ENDS*/ \n\ - \n\ -/*@TRAILER_BEGINS*/ \n\ -"); diff --git a/sysdeps/alpha/elf/start.S b/sysdeps/alpha/elf/start.S deleted file mode 100644 index ebe14b4c8e..0000000000 --- a/sysdeps/alpha/elf/start.S +++ /dev/null @@ -1,87 +0,0 @@ -/* Startup code for Alpha/ELF. - Copyright (C) 1993, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu> - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> - - .text - .align 3 - .globl _start - .ent _start, 0 - .type _start,@function -_start: - .frame $15, 0, $15 - br gp, 1f -1: ldgp gp, 0(gp) - subq sp, 16, sp - mov 0, $15 - .prologue 0 - - /* Load address of the user's main function. */ - lda a0, main - - ldl a1, 16(sp) /* get argc */ - lda a2, 24(sp) /* get argv */ - - /* Load address of our own entry points to .fini and .init. */ - lda a3, __libc_csu_init - lda a4, __libc_csu_fini - - /* Store address of the shared library termination function. */ - mov v0, a5 - - /* Provide the highest stack address to the user code. */ - stq sp, 0(sp) - - /* Call the user's main function, and exit with its value. - But let the libc call main. */ - jsr ra, __libc_start_main - - /* Die very horribly if exit returns. Call_pal hlt is callable from - kernel mode only; this will result in an illegal instruction trap. */ - call_pal 0 - .end _start - -/* For ECOFF backwards compatibility. */ -weak_alias (_start, __start) - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .weak data_start - data_start = __data_start diff --git a/sysdeps/alpha/ffs.S b/sysdeps/alpha/ffs.S deleted file mode 100644 index 5f2074ee7c..0000000000 --- a/sysdeps/alpha/ffs.S +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 1996, 1997, 1998, 2004 Free Software Foundation, Inc. - Contributed by David Mosberger (davidm@cs.arizona.edu). - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Finds the first bit set in an integer. Optimized for the Alpha - architecture. */ - -#include <sysdep.h> - - .set noreorder - .set noat - - -ENTRY(__ffs) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 - zap $16, 0xF0, $16 - br $ffsl..ng -#else - .prologue 0 - zap $16, 0xF0, $16 - # FALLTHRU -#endif -END(__ffs) - - .align 4 -ENTRY(ffsl) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -$ffsl..ng: -#else - .prologue 0 -#endif - not $16, $1 # e0 : - ldi $2, -1 # .. e1 : - cmpbge $1, $2, $3 # e0 : bit N == 1 for byte N == 0 - clr $0 # .. e1 : - addq $3, 1, $4 # e0 : - bic $4, $3, $3 # e1 : bit N == 1 for first byte N != 0 - and $3, 0xF0, $4 # e0 : - and $3, 0xCC, $5 # .. e1 : - and $3, 0xAA, $6 # e0 : - cmovne $4, 4, $0 # .. e1 : - cmovne $5, 2, $5 # e0 : - cmovne $6, 1, $6 # .. e1 : - addl $0, $5, $0 # e0 : - addl $0, $6, $0 # e1 : $0 == N - extbl $16, $0, $1 # e0 : $1 == byte N - ldi $2, 1 # .. e1 : - negq $1, $3 # e0 : - and $3, $1, $3 # e1 : bit N == least bit set of byte N - and $3, 0xF0, $4 # e0 : - and $3, 0xCC, $5 # .. e1 : - and $3, 0xAA, $6 # e0 : - cmovne $4, 5, $2 # .. e1 : - cmovne $5, 2, $5 # e0 : - cmovne $6, 1, $6 # .. e1 : - s8addl $0, $2, $0 # e0 : mult byte ofs by 8 and sum - addl $5, $6, $5 # .. e1 : - addl $0, $5, $0 # e0 : - nop # .. e1 : - cmoveq $16, 0, $0 # e0 : trap input == 0 case. - ret # .. e1 : 18 - -END(ffsl) - -weak_alias (__ffs, ffs) -libc_hidden_builtin_def (ffs) -weak_extern (ffsl) -weak_alias (ffsl, ffsll) diff --git a/sysdeps/alpha/ffsll.S b/sysdeps/alpha/ffsll.S deleted file mode 100644 index b2f46d899c..0000000000 --- a/sysdeps/alpha/ffsll.S +++ /dev/null @@ -1 +0,0 @@ -/* This function is defined in ffs.S. */ diff --git a/sysdeps/alpha/fpu/Versions b/sysdeps/alpha/fpu/Versions deleted file mode 100644 index c9b0e03a91..0000000000 --- a/sysdeps/alpha/fpu/Versions +++ /dev/null @@ -1,23 +0,0 @@ -libc { - GLIBC_2.0 { - # functions used in other libraries - __ieee_get_fp_control; __ieee_set_fp_control; - } -} -libm { - GLIBC_2.3.4 { - # functions implementing old complex float abi - __c1_cabsf; __c1_cacosf; __c1_cacoshf; __c1_cargf; __c1_casinf; - __c1_casinhf; __c1_catanf; __c1_catanhf; __c1_ccosf; __c1_ccoshf; - __c1_cexpf; __c1_cimagf; __c1_clog10f; __c1_clogf; __c1_conjf; - __c1_cpowf; __c1_cprojf; __c1_crealf; __c1_csinf; __c1_csinhf; - __c1_csqrtf; __c1_ctanf; __c1_ctanhf; - - # functions implementing new complex float abi - cabsf; cacosf; cacoshf; cargf; casinf; - casinhf; catanf; catanhf; ccosf; ccoshf; - cexpf; cimagf; clog10f; clogf; conjf; - cpowf; cprojf; crealf; csinf; csinhf; - csqrtf; ctanf; ctanhf; - } -} diff --git a/sysdeps/alpha/fpu/bits/fenv.h b/sysdeps/alpha/fpu/bits/fenv.h deleted file mode 100644 index a9e89b498e..0000000000 --- a/sysdeps/alpha/fpu/bits/fenv.h +++ /dev/null @@ -1,123 +0,0 @@ -/* Copyright (C) 1997, 1998, 1999, 2000 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; 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 the bits representing the exception. - - Note that these are the bit positions as defined by the OSF/1 - ieee_{get,set}_control_word interface and not by the hardware fpcr. - - See the Alpha Architecture Handbook section 4.7.7.3 for details, - but in summary, trap shadows mean the hardware register can acquire - extra exception bits so for proper IEEE support the tracking has to - be done in software -- in this case with kernel support. - - As to why the system call interface isn't in the same format as - the hardware register, only those crazy folks at DEC can tell you. */ - -enum - { -#ifdef __USE_GNU - FE_DENORMAL = 1UL << 22, -#define FE_DENORMAL FE_DENORMAL -#endif - - FE_INEXACT = 1UL << 21, -#define FE_INEXACT FE_INEXACT - - FE_UNDERFLOW = 1UL << 20, -#define FE_UNDERFLOW FE_UNDERFLOW - - FE_OVERFLOW = 1UL << 19, -#define FE_OVERFLOW FE_OVERFLOW - - FE_DIVBYZERO = 1UL << 18, -#define FE_DIVBYZERO FE_DIVBYZERO - - FE_INVALID = 1UL << 17, -#define FE_INVALID FE_INVALID - - FE_ALL_EXCEPT = 0x3f << 17 -#define FE_ALL_EXCEPT FE_ALL_EXCEPT - }; - -/* Alpha chips support all four defined rouding modes. - - Note that code must be compiled to use dynamic rounding (/d) instructions - to see these changes. For gcc this is -mfp-rounding-mode=d; for DEC cc - this is -fprm d. The default for both is static rounding to nearest. - - These are shifted down 58 bits from the hardware fpcr because the - functions are declared to take integers. */ - -enum - { - FE_TOWARDZERO = 0, -#define FE_TOWARDZERO FE_TOWARDZERO - - FE_DOWNWARD = 1, -#define FE_DOWNWARD FE_DOWNWARD - - FE_TONEAREST = 2, -#define FE_TONEAREST FE_TONEAREST - - FE_UPWARD = 3, -#define FE_UPWARD FE_UPWARD - }; - -#ifdef __USE_GNU -/* On later hardware, and later kernels for earlier hardware, we can forcibly - underflow denormal inputs and outputs. This can speed up certain programs - significantly, usually without affecting accuracy. */ -enum - { - FE_MAP_DMZ = 1UL << 12, /* Map denorm inputs to zero */ -#define FE_MAP_DMZ FE_MAP_DMZ - - FE_MAP_UMZ = 1UL << 13, /* Map underflowed outputs to zero */ -#define FE_MAP_UMZ FE_MAP_UMZ - }; -#endif - -/* Type representing exception flags. */ -typedef unsigned long int fexcept_t; - -/* Type representing floating-point environment. */ -typedef unsigned long int fenv_t; - -/* If the default argument is used we use this value. Note that due to - architecture-specified page mappings, no user-space pointer will ever - have its two high bits set. Co-opt one. */ -#define FE_DFL_ENV ((__const fenv_t *) 0x8800000000000000UL) - -#ifdef __USE_GNU -/* Floating-point environment where none of the exceptions are masked. */ -# define FE_NOMASK_ENV ((__const fenv_t *) 0x880000000000003eUL) - -/* Floating-point environment with (processor-dependent) non-IEEE floating - point. In this case, mapping denormals to zero. */ -# define FE_NONIEEE_ENV ((__const fenv_t *) 0x8800000000003000UL) -#endif - -/* The system calls to talk to the kernel's FP code. */ -extern unsigned long int __ieee_get_fp_control (void) __THROW; -extern void __ieee_set_fp_control (unsigned long int __value) __THROW; diff --git a/sysdeps/alpha/fpu/bits/mathinline.h b/sysdeps/alpha/fpu/bits/mathinline.h deleted file mode 100644 index 5378a181c6..0000000000 --- a/sysdeps/alpha/fpu/bits/mathinline.h +++ /dev/null @@ -1,150 +0,0 @@ -/* Inline math functions for Alpha. - Copyright (C) 1996, 1997, 1999-2001, 2004, 2007 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _MATH_H -# error "Never use <bits/mathinline.h> directly; include <math.h> instead." -#endif - -#ifndef __extern_inline -# define __MATH_INLINE __inline -#else -# define __MATH_INLINE __extern_inline -#endif - -#if defined __USE_ISOC99 && defined __GNUC__ && !__GNUC_PREREQ(3,0) -# undef isgreater -# undef isgreaterequal -# undef isless -# undef islessequal -# undef islessgreater -# undef isunordered -# define isunordered(u, v) \ - (__extension__ \ - ({ double __r, __u = (u), __v = (v); \ - __asm ("cmptun/su %1,%2,%0\n\ttrapb" \ - : "=&f" (__r) : "f" (__u), "f"(__v)); \ - __r != 0; })) -#endif /* ISO C99 */ - -#if (!defined __NO_MATH_INLINES || defined __LIBC_INTERNAL_MATH_INLINES) \ - && defined __OPTIMIZE__ - -#if !__GNUC_PREREQ (4, 0) -# define __inline_copysign(NAME, TYPE) \ -__MATH_INLINE TYPE \ -__NTH (NAME (TYPE __x, TYPE __y)) \ -{ \ - TYPE __z; \ - __asm ("cpys %1, %2, %0" : "=f" (__z) : "f" (__y), "f" (__x)); \ - return __z; \ -} - -__inline_copysign (__copysignf, float) -__inline_copysign (copysignf, float) -__inline_copysign (__copysign, double) -__inline_copysign (copysign, double) - -# undef __inline_copysign -#endif - - -#if !__GNUC_PREREQ (2, 8) -# define __inline_fabs(NAME, TYPE) \ -__MATH_INLINE TYPE \ -__NTH (NAME (TYPE __x)) \ -{ \ - TYPE __z; \ - __asm ("cpys $f31, %1, %0" : "=f" (__z) : "f" (__x)); \ - return __z; \ -} - -__inline_fabs (__fabsf, float) -__inline_fabs (fabsf, float) -__inline_fabs (__fabs, double) -__inline_fabs (fabs, double) - -# undef __inline_fabs -#endif - -#ifdef __USE_ISOC99 - -/* Test for negative number. Used in the signbit() macro. */ -__MATH_INLINE int -__NTH (__signbitf (float __x)) -{ -#if !__GNUC_PREREQ (4, 0) - __extension__ union { float __f; int __i; } __u = { __f: __x }; - return __u.__i < 0; -#else - return __builtin_signbitf (__x); -#endif -} - -__MATH_INLINE int -__NTH (__signbit (double __x)) -{ -#if !__GNUC_PREREQ (4, 0) - __extension__ union { double __d; long __i; } __u = { __d: __x }; - return __u.__i < 0; -#else - return __builtin_signbit (__x); -#endif -} - -__MATH_INLINE int -__NTH (__signbitl (long double __x)) -{ -#if !__GNUC_PREREQ (4, 0) - __extension__ union { - long double __d; - long __i[sizeof(long double)/sizeof(long)]; - } __u = { __d: __x }; - return __u.__i[sizeof(long double)/sizeof(long) - 1] < 0; -#else - return __builtin_signbitl (__x); -#endif -} - -/* Test for NaN. Used in the isnan() macro. */ - -__MATH_INLINE int -__NTH (__isnanf (float __x)) -{ - return isunordered (__x, __x); -} - -__MATH_INLINE int -__NTH (__isnan (double __x)) -{ - return isunordered (__x, __x); -} - -#ifndef __NO_LONG_DOUBLE_MATH -__MATH_INLINE int -__NTH (__isnanl (long double __x)) -{ - return isunordered (__x, __x); -} -#endif - -#endif /* C99 */ - -#endif /* __NO_MATH_INLINES */ diff --git a/sysdeps/alpha/fpu/cabsf.c b/sysdeps/alpha/fpu/cabsf.c deleted file mode 100644 index de8e6b5548..0000000000 --- a/sysdeps/alpha/fpu/cabsf.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Return the complex absolute value of float complex value. - Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __cabsf __cabsf_not_defined -#define cabsf cabsf_not_defined - -#include <complex.h> -#include <math.h> -#include "cfloat-compat.h" - -#undef __cabsf -#undef cabsf - -float -__c1_cabsf (c1_cfloat_decl (z)) -{ - return __hypotf (c1_cfloat_real (z), c1_cfloat_imag (z)); -} - -float -__c2_cabsf (c2_cfloat_decl (z)) -{ - return __hypotf (c2_cfloat_real (z), c2_cfloat_imag (z)); -} - -cfloat_versions (cabsf); diff --git a/sysdeps/alpha/fpu/cargf.c b/sysdeps/alpha/fpu/cargf.c deleted file mode 100644 index 1d96e5897d..0000000000 --- a/sysdeps/alpha/fpu/cargf.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Compute argument of complex float value. - Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __cargf __cargf_not_defined -#define cargf cargf_not_defined - -#include <complex.h> -#include <math.h> -#include "cfloat-compat.h" - -#undef __cargf -#undef cargf - -float -__c1_cargf (c1_cfloat_decl (x)) -{ - return __atan2f (c1_cfloat_imag (x), c1_cfloat_real (x)); -} - -float -__c2_cargf (c2_cfloat_decl (x)) -{ - return __atan2f (c2_cfloat_imag (x), c2_cfloat_real (x)); -} - -cfloat_versions (cargf); diff --git a/sysdeps/alpha/fpu/cfloat-compat.h b/sysdeps/alpha/fpu/cfloat-compat.h deleted file mode 100644 index d325a7650e..0000000000 --- a/sysdeps/alpha/fpu/cfloat-compat.h +++ /dev/null @@ -1,74 +0,0 @@ -/* Compatibility macros for old and new Alpha complex float ABI. - Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* The behaviour of complex float changed between GCC 3.3 and 3.4. - - In 3.3 and before (below, complex version 1, or "c1"), complex float - values were packed into one floating point register. - - In 3.4 and later (below, complex version 2, or "c2"), GCC changed to - follow the official Tru64 ABI, which passes the components of a complex - as separate parameters. */ - -#if __GNUC_PREREQ(3,4) - typedef union { double d; _Complex float cf; } c1_compat; -# define c1_cfloat_decl(x) double x -# define c1_cfloat_real(x) __real__ c1_cfloat_value (x) -# define c1_cfloat_imag(x) __imag__ c1_cfloat_value (x) -# define c1_cfloat_value(x) (((c1_compat *)(void *)&x)->cf) -# define c1_cfloat_rettype double -# define c1_cfloat_return(x) ({ c1_compat _; _.cf = (x); _.d; }) -# define c2_cfloat_decl(x) _Complex float x -# define c2_cfloat_real(x) __real__ x -# define c2_cfloat_imag(x) __imag__ x -# define c2_cfloat_value(x) x -# define c2_cfloat_rettype _Complex float -# define c2_cfloat_return(x) x -#else -# define c1_cfloat_decl(x) _Complex float x -# define c1_cfloat_real(x) __real__ x -# define c1_cfloat_imag(x) __imag__ x -# define c1_cfloat_value(x) x -# define c1_cfloat_rettype _Complex float -# define c1_cfloat_return(x) x -# define c2_cfloat_decl(x) float x ## r, float x ## i -# define c2_cfloat_real(x) x ## r -# define c2_cfloat_imag(x) x ## i -# define c2_cfloat_value(x) \ - ({ _Complex float _; __real__ _ = x##r; __imag__ _ = x##i; _; }) -# define c2_cfloat_rettype double _Complex -# define c2_cfloat_return(x) x -#endif - -/* Get the proper symbol versions defined for each function. */ - -#include <shlib-compat.h> - -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_3_4) -#define cfloat_versions_compat(func) \ - compat_symbol (libm, __c1_##func, func, GLIBC_2_1) -#else -#define cfloat_versions_compat(func) -#endif - -#define cfloat_versions(func) \ - cfloat_versions_compat(func); \ - versioned_symbol (libm, __c2_##func, func, GLIBC_2_3_4); \ - extern typeof(__c2_##func) __##func attribute_hidden; \ - strong_alias (__c2_##func, __##func) diff --git a/sysdeps/alpha/fpu/cimagf.c b/sysdeps/alpha/fpu/cimagf.c deleted file mode 100644 index a9b351f188..0000000000 --- a/sysdeps/alpha/fpu/cimagf.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Return imaginary part of complex float value. - Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __cimagf __cimagf_not_defined -#define cimagf cimagf_not_defined - -#include <complex.h> -#include "cfloat-compat.h" - -#undef __cimagf -#undef cimagf - -float -__c1_cimagf (c1_cfloat_decl (z)) -{ - return c1_cfloat_imag (z); -} - -float -__c2_cimagf (c2_cfloat_decl (z)) -{ - return c2_cfloat_imag (z); -} - -cfloat_versions (cimagf); diff --git a/sysdeps/alpha/fpu/conjf.c b/sysdeps/alpha/fpu/conjf.c deleted file mode 100644 index 6ff92b9948..0000000000 --- a/sysdeps/alpha/fpu/conjf.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Return complex conjugate of complex float value. - Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __conjf __conjf_not_defined -#define conjf conjf_not_defined - -#include <complex.h> -#include "cfloat-compat.h" - -#undef __conjf -#undef conjf - -c1_cfloat_rettype -__c1_conjf (c1_cfloat_decl (z)) -{ - _Complex float r = ~ c1_cfloat_value (z); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_conjf (c2_cfloat_decl (z)) -{ - _Complex float r = ~ c2_cfloat_value (z); - return c2_cfloat_return (r); -} - -cfloat_versions (conjf); diff --git a/sysdeps/alpha/fpu/crealf.c b/sysdeps/alpha/fpu/crealf.c deleted file mode 100644 index 52ab271738..0000000000 --- a/sysdeps/alpha/fpu/crealf.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Return real part of complex float value. - Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __crealf __crealf_not_defined -#define crealf crealf_not_defined - -#include <complex.h> -#include "cfloat-compat.h" - -#undef __crealf -#undef crealf - -float -__c1_crealf (c1_cfloat_decl (z)) -{ - return c1_cfloat_real (z); -} - -float -__c2_crealf (c2_cfloat_decl (z)) -{ - return c2_cfloat_real (z); -} - -cfloat_versions (crealf); diff --git a/sysdeps/alpha/fpu/e_sqrt.c b/sysdeps/alpha/fpu/e_sqrt.c deleted file mode 100644 index c5ab25f16f..0000000000 --- a/sysdeps/alpha/fpu/e_sqrt.c +++ /dev/null @@ -1,165 +0,0 @@ -/* Copyright (C) 1996,1997,1998,2002,2003 Free Software Foundation, Inc. - Contributed by David Mosberger (davidm@cs.arizona.edu). - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <features.h> - -#if !defined(_IEEE_FP_INEXACT) - -/* - * This version is much faster than generic sqrt implementation, but - * it doesn't handle the inexact flag. It doesn't handle exceptional - * values either, but will defer to the full ieee754_sqrt routine which - * can. - */ - -/* Careful with rearranging this without consulting the assembly below. */ -const static struct sqrt_data_struct { - unsigned long dn, up, half, almost_three_half; - unsigned long one_and_a_half, two_to_minus_30, one, nan; - const int T2[64]; -} sqrt_data __attribute__((used)) = { - 0x3fefffffffffffff, /* __dn = nextafter(1,-Inf) */ - 0x3ff0000000000001, /* __up = nextafter(1,+Inf) */ - 0x3fe0000000000000, /* half */ - 0x3ff7ffffffc00000, /* almost_three_half = 1.5-2^-30 */ - 0x3ff8000000000000, /* one_and_a_half */ - 0x3e10000000000000, /* two_to_minus_30 */ - 0x3ff0000000000000, /* one */ - 0xffffffffffffffff, /* nan */ - - { 0x1500, 0x2ef8, 0x4d67, 0x6b02, 0x87be, 0xa395, 0xbe7a, 0xd866, - 0xf14a, 0x1091b,0x11fcd,0x13552,0x14999,0x15c98,0x16e34,0x17e5f, - 0x18d03,0x19a01,0x1a545,0x1ae8a,0x1b5c4,0x1bb01,0x1bfde,0x1c28d, - 0x1c2de,0x1c0db,0x1ba73,0x1b11c,0x1a4b5,0x1953d,0x18266,0x16be0, - 0x1683e,0x179d8,0x18a4d,0x19992,0x1a789,0x1b445,0x1bf61,0x1c989, - 0x1d16d,0x1d77b,0x1dddf,0x1e2ad,0x1e5bf,0x1e6e8,0x1e654,0x1e3cd, - 0x1df2a,0x1d635,0x1cb16,0x1be2c,0x1ae4e,0x19bde,0x1868e,0x16e2e, - 0x1527f,0x1334a,0x11051,0xe951, 0xbe01, 0x8e0d, 0x5924, 0x1edd } -}; - -asm ("\ - /* Define offsets into the structure defined in C above. */ \n\ - $DN = 0*8 \n\ - $UP = 1*8 \n\ - $HALF = 2*8 \n\ - $ALMOST_THREE_HALF = 3*8 \n\ - $NAN = 7*8 \n\ - $T2 = 8*8 \n\ - \n\ - /* Stack variables. */ \n\ - $K = 0 \n\ - $Y = 8 \n\ - \n\ - .text \n\ - .align 5 \n\ - .globl __ieee754_sqrt \n\ - .ent __ieee754_sqrt \n\ -__ieee754_sqrt: \n\ - ldgp $29, 0($27) \n\ - subq $sp, 16, $sp \n\ - .frame $sp, 16, $26, 0\n" -#ifdef PROF -" lda $28, _mcount \n\ - jsr $28, ($28), _mcount\n" -#endif -" .prologue 1 \n\ - \n\ - .align 4 \n\ - stt $f16, $K($sp) # e0 : \n\ - mult $f31, $f31, $f31 # .. fm : \n\ - lda $4, sqrt_data # e0 : \n\ - fblt $f16, $fixup # .. fa : \n\ - \n\ - ldah $2, 0x5fe8 # e0 : \n\ - ldq $3, $K($sp) # .. e1 : \n\ - ldt $f12, $HALF($4) # e0 : \n\ - ldt $f18, $ALMOST_THREE_HALF($4) # .. e1 : \n\ - \n\ - sll $3, 52, $5 # e0 : \n\ - lda $6, 0x7fd # .. e1 : \n\ - fnop # .. fa : \n\ - fnop # .. fm : \n\ - \n\ - subq $5, 1, $5 # e1 : \n\ - srl $3, 33, $1 # .. e0 : \n\ - cmpule $5, $6, $5 # e0 : \n\ - beq $5, $fixup # .. e1 : \n\ - \n\ - mult $f16, $f12, $f11 # fm : $f11 = x * 0.5 \n\ - subl $2, $1, $2 # .. e0 : \n\ - addt $f12, $f12, $f17 # .. fa : $f17 = 1.0 \n\ - srl $2, 12, $1 # e0 : \n\ - \n\ - and $1, 0xfc, $1 # e0 : \n\ - addq $1, $4, $1 # e1 : \n\ - ldl $1, $T2($1) # e0 : \n\ - addt $f12, $f17, $f15 # .. fa : $f15 = 1.5 \n\ - \n\ - subl $2, $1, $2 # e0 : \n\ - ldt $f14, $DN($4) # .. e1 : \n\ - sll $2, 32, $2 # e0 : \n\ - stq $2, $Y($sp) # e0 : \n\ - \n\ - ldt $f13, $Y($sp) # e0 : \n\ - mult/su $f11, $f13, $f10 # fm 2: $f10 = (x * 0.5) * y \n\ - mult $f10, $f13, $f10 # fm 4: $f10 = ((x*0.5)*y)*y \n\ - subt $f15, $f10, $f1 # fa 4: $f1 = (1.5-0.5*x*y*y) \n\ - \n\ - mult $f13, $f1, $f13 # fm 4: yp = y*(1.5-0.5*x*y^2)\n\ - mult/su $f11, $f13, $f1 # fm 4: $f11 = x * 0.5 * yp \n\ - mult $f1, $f13, $f11 # fm 4: $f11 = (x*0.5*yp)*yp \n\ - subt $f18, $f11, $f1 # fa 4: $f1=(1.5-2^-30)-x/2*yp^2\n\ - \n\ - mult $f13, $f1, $f13 # fm 4: ypp = $f13 = yp*$f1 \n\ - subt $f15, $f12, $f1 # .. fa : $f1 = (1.5 - 0.5) \n\ - ldt $f15, $UP($4) # .. e0 : \n\ - mult/su $f16, $f13, $f10 # fm 4: z = $f10 = x * ypp \n\ - \n\ - mult $f10, $f13, $f11 # fm 4: $f11 = z*ypp \n\ - mult $f10, $f12, $f12 # fm : $f12 = z*0.5 \n\ - subt $f1, $f11, $f1 # fa 4: $f1 = 1 - z*ypp \n\ - mult $f12, $f1, $f12 # fm 4: $f12 = z/2*(1 - z*ypp)\n\ - \n\ - addt $f10, $f12, $f0 # fa 4: zp=res= z+z/2*(1-z*ypp)\n\ - mult/c $f0, $f14, $f12 # fm 4: zmi = zp * DN \n\ - mult/c $f0, $f15, $f11 # fm : zpl = zp * UP \n\ - mult/c $f0, $f12, $f1 # fm : $f1 = zp * zmi \n\ - \n\ - mult/c $f0, $f11, $f15 # fm : $f15 = zp * zpl \n\ - subt/su $f1, $f16, $f13 # .. fa : y1 = zp*zmi - x \n\ - subt/su $f15, $f16, $f14 # fa 4: y2 = zp*zpl - x \n\ - fcmovge $f13, $f12, $f0 # fa 3: res = (y1>=0)?zmi:res \n\ - \n\ - fcmovlt $f14, $f11, $f0 # fa 4: res = (y2<0)?zpl:res \n\ - addq $sp, 16, $sp # .. e0 : \n\ - ret # .. e1 : \n\ - \n\ - .align 4 \n\ -$fixup: \n\ - addq $sp, 16, $sp \n\ - br __full_ieee754_sqrt !samegp \n\ - \n\ - .end __ieee754_sqrt"); - -static double __full_ieee754_sqrt(double) __attribute_used__; -#define __ieee754_sqrt __full_ieee754_sqrt - -#endif /* _IEEE_FP_INEXACT */ - -#include <sysdeps/ieee754/dbl-64/e_sqrt.c> diff --git a/sysdeps/alpha/fpu/fclrexcpt.c b/sysdeps/alpha/fpu/fclrexcpt.c deleted file mode 100644 index b7176e0979..0000000000 --- a/sysdeps/alpha/fpu/fclrexcpt.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Clear given exceptions in current floating-point environment. - Copyright (C) 1997,99,2000,01 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>, 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fenv_libc.h> - -int -__feclearexcept (int excepts) -{ - unsigned long int swcr; - - /* Get the current state. */ - swcr = __ieee_get_fp_control (); - - /* Clear the relevant bits. */ - swcr &= ~((unsigned long int) excepts & SWCR_STATUS_MASK); - - /* Put the new state in effect. */ - __ieee_set_fp_control (swcr); - - /* Success. */ - return 0; -} - -#include <shlib-compat.h> -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feclearexcept, __old_feclearexcept) -compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1); -#endif - -versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2); diff --git a/sysdeps/alpha/fpu/fedisblxcpt.c b/sysdeps/alpha/fpu/fedisblxcpt.c deleted file mode 100644 index 98c33ca842..0000000000 --- a/sysdeps/alpha/fpu/fedisblxcpt.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Disable floating-point exceptions. - Copyright (C) 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek <jakub@redhat.com>, 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fenv_libc.h> - -int -fedisableexcept (int excepts) -{ - unsigned long int new_exc, old_exc; - - new_exc = __ieee_get_fp_control (); - - old_exc = (new_exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT; - new_exc &= ~((excepts >> SWCR_ENABLE_SHIFT) & SWCR_ENABLE_MASK); - - __ieee_set_fp_control (new_exc); - - return old_exc; -} diff --git a/sysdeps/alpha/fpu/feenablxcpt.c b/sysdeps/alpha/fpu/feenablxcpt.c deleted file mode 100644 index 80d657e4bd..0000000000 --- a/sysdeps/alpha/fpu/feenablxcpt.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Enable floating-point exceptions. - Copyright (C) 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek <jakub@redhat.com>, 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fenv_libc.h> - -int -feenableexcept (int excepts) -{ - unsigned long int new_exc, old_exc; - - new_exc = __ieee_get_fp_control (); - - old_exc = (new_exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT; - new_exc |= (excepts >> SWCR_ENABLE_SHIFT) & SWCR_ENABLE_MASK; - - __ieee_set_fp_control (new_exc); - - return old_exc; -} diff --git a/sysdeps/alpha/fpu/fegetenv.c b/sysdeps/alpha/fpu/fegetenv.c deleted file mode 100644 index c1950fa3b9..0000000000 --- a/sysdeps/alpha/fpu/fegetenv.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Store current floating-point environment. - Copyright (C) 1997,99,2000,01 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>, 1997 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fenv_libc.h> - -int -__fegetenv (fenv_t *envp) -{ - unsigned long int fpcr; - unsigned long int swcr; - - /* Get status from software and hardware. Note that we don't need an - excb because the callsys is an implied trap barrier. */ - swcr = __ieee_get_fp_control (); - __asm__ __volatile__ ("mf_fpcr %0" : "=f" (fpcr)); - - /* Merge the two bits of information. */ - *envp = ((fpcr & FPCR_ROUND_MASK) | (swcr & SWCR_ALL_MASK)); - - /* Success. */ - return 0; -} - -#include <shlib-compat.h> -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetenv, __old_fegetenv) -compat_symbol (libm, __old_fegetenv, fegetenv, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fegetenv, fegetenv, GLIBC_2_2); diff --git a/sysdeps/alpha/fpu/fegetexcept.c b/sysdeps/alpha/fpu/fegetexcept.c deleted file mode 100644 index ccc79e405d..0000000000 --- a/sysdeps/alpha/fpu/fegetexcept.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Get enabled floating-point exceptions. - Copyright (C) 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek <jakub@redhat.com>, 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fenv_libc.h> - -int -fegetexcept (void) -{ - unsigned long int exc; - - exc = __ieee_get_fp_control (); - - return (exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT; -} diff --git a/sysdeps/alpha/fpu/fegetround.c b/sysdeps/alpha/fpu/fegetround.c deleted file mode 100644 index 995aee80da..0000000000 --- a/sysdeps/alpha/fpu/fegetround.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Return current rounding direction. - Copyright (C) 1997, 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>, 1997 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fenv_libc.h> - -int -fegetround (void) -{ - unsigned long fpcr; - - __asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr)); - - return (fpcr >> FPCR_ROUND_SHIFT) & 3; -} diff --git a/sysdeps/alpha/fpu/feholdexcpt.c b/sysdeps/alpha/fpu/feholdexcpt.c deleted file mode 100644 index 79aa970ac0..0000000000 --- a/sysdeps/alpha/fpu/feholdexcpt.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Store current floating-point environment and clear exceptions. - Copyright (C) 1997, 2000, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>, 1997 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fenv_libc.h> - -int -feholdexcept (fenv_t *envp) -{ - /* Save the current state. */ - fegetenv(envp); - - /* Clear all exception status bits and exception enable bits. */ - __ieee_set_fp_control(*envp & SWCR_MAP_MASK); - - return 0; -} -libm_hidden_def (feholdexcept) diff --git a/sysdeps/alpha/fpu/fenv_libc.h b/sysdeps/alpha/fpu/fenv_libc.h deleted file mode 100644 index f1d187d9e2..0000000000 --- a/sysdeps/alpha/fpu/fenv_libc.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Internal libc stuff for floating point environment routines. - Copyright (C) 2000 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _FENV_LIBC_H -#define _FENV_LIBC_H 1 - -#include <fenv.h> - -#define FPCR_ROUND_MASK (3UL << 58) -#define FPCR_ROUND_SHIFT 58 - -#define SWCR_MAP_MASK (3UL << 12) -#define SWCR_ENABLE_SHIFT 16 -#define SWCR_ENABLE_MASK (FE_ALL_EXCEPT >> SWCR_ENABLE_SHIFT) -#define SWCR_STATUS_MASK (FE_ALL_EXCEPT) -#define SWCR_ALL_MASK (SWCR_ENABLE_MASK \ - | SWCR_MAP_MASK \ - | SWCR_STATUS_MASK) - -#endif /* fenv_libc.h */ diff --git a/sysdeps/alpha/fpu/fesetenv.c b/sysdeps/alpha/fpu/fesetenv.c deleted file mode 100644 index c76e882891..0000000000 --- a/sysdeps/alpha/fpu/fesetenv.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Install given floating-point environment. - Copyright (C) 1997,99,2000,01,02 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>, 1997 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fenv_libc.h> - -int -__fesetenv (const fenv_t *envp) -{ - unsigned long int fpcr; - fenv_t env; - - /* Magic encoding of default values: high bit set (never possible for a - user-space address) is not indirect. And we don't even have to get - rid of it since we mask things around just below. */ - if ((long int) envp >= 0) - env = *envp; - else - env = (unsigned long int) envp; - - /* Reset the rounding mode with the hardware fpcr. Note that the following - system call is an implied trap barrier for our modification. */ - __asm__ __volatile__ ("excb; mf_fpcr %0" : "=f" (fpcr)); - fpcr = (fpcr & ~FPCR_ROUND_MASK) | (env & FPCR_ROUND_MASK); - __asm__ __volatile__ ("mt_fpcr %0" : : "f" (fpcr)); - - /* Reset the exception status and mask with the kernel's FP code. */ - __ieee_set_fp_control (env & SWCR_ALL_MASK); - - /* Success. */ - return 0; -} - -#include <shlib-compat.h> -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetenv, __old_fesetenv) -compat_symbol (libm, __old_fesetenv, fesetenv, GLIBC_2_1); -#endif - -libm_hidden_ver (__fesetenv, fesetenv) -versioned_symbol (libm, __fesetenv, fesetenv, GLIBC_2_2); diff --git a/sysdeps/alpha/fpu/fesetround.c b/sysdeps/alpha/fpu/fesetround.c deleted file mode 100644 index 54b2bcf673..0000000000 --- a/sysdeps/alpha/fpu/fesetround.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Set current rounding direction. - Copyright (C) 1997, 2000, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>, 1997 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fenv_libc.h> - -int -fesetround (int round) -{ - unsigned long fpcr; - - if (round & ~3) - return 1; - - /* Get the current state. */ - __asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr)); - - /* Set the relevant bits. */ - fpcr = ((fpcr & ~FPCR_ROUND_MASK) - | ((unsigned long)round << FPCR_ROUND_SHIFT)); - - /* Put the new state in effect. */ - __asm__ __volatile__("mt_fpcr %0; excb" : : "f"(fpcr)); - - return 0; -} -libm_hidden_def (fesetround) diff --git a/sysdeps/alpha/fpu/feupdateenv.c b/sysdeps/alpha/fpu/feupdateenv.c deleted file mode 100644 index c798070bbb..0000000000 --- a/sysdeps/alpha/fpu/feupdateenv.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Install given floating-point environment and raise exceptions. - Copyright (C) 1997,99,2000,01 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>, 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fenv_libc.h> - -int -__feupdateenv (const fenv_t *envp) -{ - unsigned long int tmp; - - /* Get the current exception state. */ - tmp = __ieee_get_fp_control (); - - /* Install new environment. */ - fesetenv (envp); - - /* Raise the saved exception. Incidently for us the implementation - defined format of the values in objects of type fexcept_t is the - same as the ones specified using the FE_* constants. */ - feraiseexcept (tmp & SWCR_STATUS_MASK); - - /* Success. */ - return 0; -} - -#include <shlib-compat.h> -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feupdateenv, __old_feupdateenv) -compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1); -#endif - -versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2); diff --git a/sysdeps/alpha/fpu/fgetexcptflg.c b/sysdeps/alpha/fpu/fgetexcptflg.c deleted file mode 100644 index c28e913359..0000000000 --- a/sysdeps/alpha/fpu/fgetexcptflg.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Store current representation for exceptions. - Copyright (C) 1997,99,2000,01 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>, 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fenv_libc.h> - -int -__fegetexceptflag (fexcept_t *flagp, int excepts) -{ - unsigned long int tmp; - - /* Get the current state. */ - tmp = __ieee_get_fp_control(); - - /* Return that portion that corresponds to the requested exceptions. */ - *flagp = tmp & excepts & SWCR_STATUS_MASK; - - /* Success. */ - return 0; -} - -#include <shlib-compat.h> -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetexceptflag, __old_fegetexceptflag) -compat_symbol (libm, __old_fegetexceptflag, fegetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fegetexceptflag, fegetexceptflag, GLIBC_2_2); diff --git a/sysdeps/alpha/fpu/fpu_control.h b/sysdeps/alpha/fpu/fpu_control.h deleted file mode 100644 index 28acdf1704..0000000000 --- a/sysdeps/alpha/fpu/fpu_control.h +++ /dev/null @@ -1,106 +0,0 @@ -/* FPU control word bits. Alpha-mapped-to-Intel version. - Copyright (C) 1996, 1998, 2000, 2002 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Olaf Flebbe. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _ALPHA_FPU_CONTROL_H -#define _ALPHA_FPU_CONTROL_H - -/* - * Since many programs seem to hardcode the values passed to __setfpucw() - * (rather than using the manifest constants) we emulate the x87 interface - * here (at least where this makes sense). - * - * 15-13 12 11-10 9-8 7-6 5 4 3 2 1 0 - * | reserved | IC | RC | PC | reserved | PM | UM | OM | ZM | DM | IM - * - * IM: Invalid operation mask - * DM: Denormalized operand mask - * ZM: Zero-divide mask - * OM: Overflow mask - * UM: Underflow mask - * PM: Precision (inexact result) mask - * - * Mask bit is 1 means no interrupt. - * - * PC: Precision control - * 11 - round to extended precision - * 10 - round to double precision - * 00 - round to single precision - * - * RC: Rounding control - * 00 - rounding to nearest - * 01 - rounding down (toward - infinity) - * 10 - rounding up (toward + infinity) - * 11 - rounding toward zero - * - * IC: Infinity control - * That is for 8087 and 80287 only. - * - * The hardware default is 0x037f. I choose 0x1372. - */ - -#include <features.h> - -/* masking of interrupts */ -#define _FPU_MASK_IM 0x01 -#define _FPU_MASK_DM 0x02 -#define _FPU_MASK_ZM 0x04 -#define _FPU_MASK_OM 0x08 -#define _FPU_MASK_UM 0x10 -#define _FPU_MASK_PM 0x20 - -/* precision control -- without effect on Alpha */ -#define _FPU_EXTENDED 0x300 /* RECOMMENDED */ -#define _FPU_DOUBLE 0x200 -#define _FPU_SINGLE 0x0 /* DO NOT USE */ - -/* - * rounding control---notice that on the Alpha this affects only - * instructions with the dynamic rounding mode qualifier (/d). - */ -#define _FPU_RC_NEAREST 0x000 /* RECOMMENDED */ -#define _FPU_RC_DOWN 0x400 -#define _FPU_RC_UP 0x800 -#define _FPU_RC_ZERO 0xC00 - -#define _FPU_RESERVED 0xF0C0 /* Reserved bits in cw */ - - -/* Now two recommended cw */ - -/* Linux default: - - extended precision - - rounding to positive infinity. There is no /p instruction - qualifier. By setting the dynamic rounding mode to +infinity, - one can use /d to get round to +infinity with no extra overhead - (so long as the default isn't changed, of course...) - - no exceptions enabled. */ - -#define _FPU_DEFAULT 0x137f - -/* IEEE: same as above. */ -#define _FPU_IEEE 0x137f - -/* Type of the control word. */ -typedef unsigned int fpu_control_t; - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -#endif /* _ALPHA_FPU_CONTROL */ diff --git a/sysdeps/alpha/fpu/fsetexcptflg.c b/sysdeps/alpha/fpu/fsetexcptflg.c deleted file mode 100644 index d198731861..0000000000 --- a/sysdeps/alpha/fpu/fsetexcptflg.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Set floating-point environment exception handling. - Copyright (C) 1997,98,99,2000,01 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>, 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fenv_libc.h> - -int -__fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - unsigned long int tmp; - - /* Get the current exception state. */ - tmp = __ieee_get_fp_control (); - - /* Set all the bits that were called for. */ - tmp = (tmp & ~SWCR_STATUS_MASK) | (*flagp & excepts & SWCR_STATUS_MASK); - - /* And store it back. */ - __ieee_set_fp_control (tmp); - - /* Success. */ - return 0; -} - -#include <shlib-compat.h> -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetexceptflag, __old_fesetexceptflag) -compat_symbol (libm, __old_fesetexceptflag, fesetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fesetexceptflag, fesetexceptflag, GLIBC_2_2); diff --git a/sysdeps/alpha/fpu/ftestexcept.c b/sysdeps/alpha/fpu/ftestexcept.c deleted file mode 100644 index a4b3081875..0000000000 --- a/sysdeps/alpha/fpu/ftestexcept.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Test exception in current environment. - Copyright (C) 1997, 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>, 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fenv_libc.h> - -int -fetestexcept (int excepts) -{ - unsigned long tmp; - - /* Get current exceptions. */ - tmp = __ieee_get_fp_control(); - - return tmp & excepts & SWCR_STATUS_MASK; -} diff --git a/sysdeps/alpha/fpu/libm-test-ulps b/sysdeps/alpha/fpu/libm-test-ulps deleted file mode 100644 index d9df631d7c..0000000000 --- a/sysdeps/alpha/fpu/libm-test-ulps +++ /dev/null @@ -1,1245 +0,0 @@ -# Begin of automatic generation - -# atan2 -Test "atan2 (-0.00756827042671106339, -.001792735857538728036) == -1.80338464113663849327153994379639112": -ildouble: 1 -ldouble: 1 -Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -# atanh -Test "atanh (0.75) == 0.972955074527656652552676371721589865": -float: 1 -ifloat: 1 - -# cacos -Test "Imaginary part of: cacos (0.75 + 1.25 i) == 1.11752014915610270578240049553777969 - 1.13239363160530819522266333696834467 i": -ildouble: 1 -ldouble: 1 - -# cacosh -Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -# casin -Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i": -ildouble: 1 -ldouble: 1 - -# casinh -Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": -double: 5 -float: 1 -idouble: 5 -ifloat: 1 -ildouble: 4 -ldouble: 4 -Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": -double: 3 -float: 6 -idouble: 3 -ifloat: 6 -ildouble: 2 -ldouble: 2 -Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "Imaginary part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -# catan -Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i": -ildouble: 1 -ldouble: 1 - -# catanh -Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": -double: 4 -idouble: 4 -Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 -Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i": -ildouble: 1 -ldouble: 1 - -# cbrt -Test "cbrt (-0.001) == -0.1": -ildouble: 1 -ldouble: 1 -Test "cbrt (-27.0) == -3.0": -double: 1 -idouble: 1 -Test "cbrt (0.75) == 0.908560296416069829445605878163630251": -double: 1 -idouble: 1 -Test "cbrt (0.9921875) == 0.997389022060725270579075195353955217": -double: 1 -idouble: 1 - -# ccos -Test "Real part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i": -ildouble: 1 -ldouble: 1 -Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i": -float: 1 -ifloat: 1 - -# ccosh -Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i": -float: 1 -ifloat: 1 - -# cexp -Test "Real part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i": -ildouble: 1 -ldouble: 1 -Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i": -float: 1 -ifloat: 1 -Test "Imaginary part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i": -ildouble: 1 -ldouble: 1 - -# clog -Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -# clog10 -Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i": -ildouble: 1 -ldouble: 1 -Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 -Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (-inf + inf i) == inf + 3/4 pi*log10(e) i": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i": -ildouble: 1 -ldouble: 1 -Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -# cos -Test "cos (M_PI_6l * 2.0) == 0.5": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 -Test "cos (M_PI_6l * 4.0) == -0.5": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -# cpow -Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i": -float: 1 -ifloat: 1 -Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i": -float: 1 -ifloat: 1 -Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i": -double: 1 -float: 4 -idouble: 1 -ifloat: 4 -ildouble: 4 -ldouble: 4 -Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i) == 0.75 + 1.25 i": -ildouble: 2 -ldouble: 2 -Test "Imaginary part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i) == 0.75 + 1.25 i": -ildouble: 1 -ldouble: 1 -Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 10 -ldouble: 10 -Test "Real part of: cpow (2 + 0 i, 10 + 0 i) == 1024.0 + 0.0 i": -ildouble: 2 -ldouble: 2 -Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": -double: 1 -float: 4 -idouble: 1 -ifloat: 4 -ildouble: 3 -ldouble: 3 -Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": -float: 2 -ifloat: 2 -Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -# csin -Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i": -ildouble: 1 -ldouble: 1 -Test "Real part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i": -ildouble: 1 -ldouble: 1 - -# csinh -Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i": -ildouble: 1 -ldouble: 1 -Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i": -double: 1 -idouble: 1 -Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i": -float: 1 -ifloat: 1 -Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i": -float: 1 -ifloat: 1 - -# csqrt -Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "Imaginary part of: csqrt (0.75 + 1.25 i) == 1.05065169626078392338656675760808326 + 0.594868882070379067881984030639932657 i": -ildouble: 1 -ldouble: 1 - -# ctan -Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i": -ildouble: 1 -ldouble: 1 -Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i": -ildouble: 1 -ldouble: 1 -Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -# ctanh -Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 -Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i": -ildouble: 1 -ldouble: 1 -Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i": -float: 1 -ifloat: 1 -Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i": -double: 1 -idouble: 1 - -# erf -Test "erf (1.25) == 0.922900128256458230136523481197281140": -double: 1 -idouble: 1 - -# erfc -Test "erfc (2.0) == 0.00467773498104726583793074363274707139": -double: 1 -idouble: 1 -Test "erfc (27.0) == 0.523704892378925568501606768284954709e-318": -ildouble: 1 -ldouble: 1 -Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8": -double: 1 -idouble: 1 - -# exp10 -Test "exp10 (-1) == 0.1": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "exp10 (0.75) == 5.62341325190349080394951039776481231": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "exp10 (3) == 1000": -double: 6 -float: 2 -idouble: 6 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -# exp2 -Test "exp2 (10) == 1024": -ildouble: 2 -ldouble: 2 - -# expm1 -Test "expm1 (0.75) == 1.11700001661267466854536981983709561": -double: 1 -idouble: 1 -Test "expm1 (1) == M_El - 1.0": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -# gamma -Test "gamma (-0.5) == log(2*sqrt(pi))": -ildouble: 1 -ldouble: 1 - -# hypot -Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271": -float: 1 -ifloat: 1 -Test "hypot (-0.7, 12.4) == 12.419742348374220601176836866763271": -float: 1 -ifloat: 1 -Test "hypot (-12.4, -0.7) == 12.419742348374220601176836866763271": -float: 1 -ifloat: 1 -Test "hypot (-12.4, 0.7) == 12.419742348374220601176836866763271": -float: 1 -ifloat: 1 -Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271": -float: 1 -ifloat: 1 -Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271": -float: 1 -ifloat: 1 -Test "hypot (12.4, -0.7) == 12.419742348374220601176836866763271": -float: 1 -ifloat: 1 -Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271": -float: 1 -ifloat: 1 - -# j0 -Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "j0 (0.75) == 0.864242275166648623555731103820923211": -float: 1 -ifloat: 1 -Test "j0 (10.0) == -0.245935764451348335197760862485328754": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 -Test "j0 (2.0) == 0.223890779141235668051827454649948626": -float: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 -Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "j0 (8.0) == 0.171650807137553906090869407851972001": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -# j1 -Test "j1 (-1.0) == -0.440050585744933515959682203718914913": -ildouble: 1 -ldouble: 1 -Test "j1 (0.75) == 0.349243602174862192523281016426251335": -ildouble: 1 -ldouble: 1 -Test "j1 (1.0) == 0.440050585744933515959682203718914913": -ildouble: 1 -ldouble: 1 -Test "j1 (10.0) == 0.0434727461688614366697487680258592883": -float: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 -Test "j1 (2.0) == 0.576724807756873387202448242269137087": -double: 1 -idouble: 1 -Test "j1 (8.0) == 0.234636346853914624381276651590454612": -double: 1 -idouble: 1 -ildouble: 4 -ldouble: 4 - -# jn -Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "jn (0, 0.75) == 0.864242275166648623555731103820923211": -float: 1 -ifloat: 1 -Test "jn (0, 10.0) == -0.245935764451348335197760862485328754": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 -Test "jn (0, 2.0) == 0.223890779141235668051827454649948626": -float: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 -Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "jn (0, 8.0) == 0.171650807137553906090869407851972001": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "jn (1, -1.0) == -0.440050585744933515959682203718914913": -ildouble: 1 -ldouble: 1 -Test "jn (1, 0.75) == 0.349243602174862192523281016426251335": -ildouble: 1 -ldouble: 1 -Test "jn (1, 1.0) == 0.440050585744933515959682203718914913": -ildouble: 1 -ldouble: 1 -Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883": -float: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 -Test "jn (1, 2.0) == 0.576724807756873387202448242269137087": -double: 1 -idouble: 1 -Test "jn (1, 8.0) == 0.234636346853914624381276651590454612": -double: 1 -idouble: 1 -ildouble: 4 -ldouble: 4 -Test "jn (10, -1.0) == 0.263061512368745320699785368779050294e-9": -ildouble: 1 -ldouble: 1 -Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "jn (10, 1.0) == 0.263061512368745320699785368779050294e-9": -ildouble: 1 -ldouble: 1 -Test "jn (10, 10.0) == 0.207486106633358857697278723518753428": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 2 -ldouble: 2 -Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6": -float: 4 -ifloat: 4 -Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 2 -ldouble: 2 -Test "jn (3, 2.0) == 0.128943249474402051098793332969239835": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -# lgamma -Test "lgamma (-0.5) == log(2*sqrt(pi))": -ildouble: 1 -ldouble: 1 -Test "lgamma (0.7) == 0.260867246531666514385732417016759578": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -# log10 -Test "log10 (0.75) == -0.124938736608299953132449886193870744": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -Test "log10 (e) == log10(e)": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -# log1p -Test "log1p (-0.25) == -0.287682072451780927439219005993827432": -float: 1 -ifloat: 1 - -# log2 -Test "log2 (0.75) == -.415037499278843818546261056052183492": -ildouble: 1 -ldouble: 1 - -# sincos -Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 -Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res": -float: 1 -ifloat: 1 - -# sqrt -Test "sqrt (2) == M_SQRT2l": -ildouble: 1 -ldouble: 1 - -# tanh -Test "tanh (-0.75) == -0.635148952387287319214434357312496495": -ildouble: 1 -ldouble: 1 -Test "tanh (-1.0) == -0.7615941559557648881194582826047935904": -ildouble: 1 -ldouble: 1 -Test "tanh (0.75) == 0.635148952387287319214434357312496495": -ildouble: 1 -ldouble: 1 -Test "tanh (1.0) == 0.7615941559557648881194582826047935904": -ildouble: 1 -ldouble: 1 - -# tgamma -Test "tgamma (-0.5) == -2 sqrt (pi)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "tgamma (0.5) == sqrt (pi)": -float: 1 -ifloat: 1 -Test "tgamma (0.7) == 1.29805533264755778568117117915281162": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (4) == 6": -ildouble: 1 -ldouble: 1 - -# y0 -Test "y0 (1.0) == 0.0882569642156769579829267660235151628": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "y0 (1.5) == 0.382448923797758843955068554978089862": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "y0 (10.0) == 0.0556711672835993914244598774101900481": -float: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 -Test "y0 (8.0) == 0.223521489387566220527323400498620359": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -# y1 -Test "y1 (0.125) == -5.19993611253477499595928744876579921": -double: 1 -idouble: 1 -Test "y1 (0.75) == -1.03759455076928541973767132140642198": -ildouble: 1 -ldouble: 1 -Test "y1 (1.5) == -0.412308626973911295952829820633445323": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "y1 (10.0) == 0.249015424206953883923283474663222803": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -Test "y1 (2.0) == -0.107032431540937546888370772277476637": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "y1 (8.0) == -0.158060461731247494255555266187483550": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -# yn -Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "yn (0, 1.5) == 0.382448923797758843955068554978089862": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481": -float: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 -Test "yn (0, 8.0) == 0.223521489387566220527323400498620359": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 -Test "yn (1, 0.125) == -5.19993611253477499595928744876579921": -double: 1 -idouble: 1 -Test "yn (1, 0.75) == -1.03759455076928541973767132140642198": -ildouble: 1 -ldouble: 1 -Test "yn (1, 1.5) == -0.412308626973911295952829820633445323": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "yn (1, 10.0) == 0.249015424206953883923283474663222803": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -Test "yn (1, 2.0) == -0.107032431540937546888370772277476637": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "yn (1, 8.0) == -0.158060461731247494255555266187483550": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 -Test "yn (10, 0.125) == -127057845771019398.252538486899753195": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 -Test "yn (10, 0.75) == -2133501638.90573424452445412893839236": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 5 -ldouble: 5 -Test "yn (10, 1.0) == -121618014.278689189288130426667971145": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 -Test "yn (10, 10.0) == -0.359814152183402722051986577343560609": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 -Test "yn (10, 2.0) == -129184.542208039282635913145923304214": -double: 2 -idouble: 2 -ildouble: 2 -ldouble: 2 -Test "yn (3, 0.125) == -2612.69757350066712600220955744091741": -double: 1 -idouble: 1 -Test "yn (3, 0.75) == -12.9877176234475433186319774484809207": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 -Test "yn (3, 10.0) == -0.251362657183837329779204747654240998": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 -Test "yn (3, 2.0) == -1.12778377684042778608158395773179238": -double: 1 -idouble: 1 - -# Maximal error of functions: -Function: "atan2": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atanh": -float: 1 -ifloat: 1 - -Function: Imaginary part of "cacos": -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cacosh": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "casin": -ildouble: 1 -ldouble: 1 - -Function: Real part of "casinh": -double: 5 -float: 1 -idouble: 5 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "casinh": -double: 3 -float: 6 -idouble: 3 -ifloat: 6 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh": -double: 4 -idouble: 4 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catanh": -ildouble: 1 -ldouble: 1 - -Function: "cbrt": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccosh": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cexp": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cexp": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog10": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "clog10": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cpow": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 10 -ldouble: 10 - -Function: Imaginary part of "cpow": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csin": -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csin": -ildouble: 1 -ldouble: 1 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csqrt": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csqrt": -ildouble: 1 -ldouble: 1 - -Function: Real part of "ctan": -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ctan": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ctanh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ctanh": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf": -double: 1 -idouble: 1 - -Function: "erfc": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp10": -double: 6 -float: 2 -idouble: 6 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "exp2": -ildouble: 2 -ldouble: 2 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "gamma": -ildouble: 1 -ldouble: 1 - -Function: "hypot": -float: 1 -ifloat: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "lgamma": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log10": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log1p": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log2": -ildouble: 1 -ldouble: 1 - -Function: "sincos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sqrt": -ildouble: 1 -ldouble: 1 - -Function: "tan": -double: 1 -idouble: 1 - -Function: "tanh": -ildouble: 1 -ldouble: 1 - -Function: "tgamma": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -# end of automatic generation diff --git a/sysdeps/alpha/fpu/s_cacosf.c b/sysdeps/alpha/fpu/s_cacosf.c deleted file mode 100644 index 46dca5aeb8..0000000000 --- a/sysdeps/alpha/fpu/s_cacosf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return arc cosine of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __cacosf __cacosf_not_defined -#define cacosf cacosf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __cacosf -#undef cacosf -#define __cacosf internal_cacosf - -static _Complex float internal_cacosf (_Complex float x); - -#include <math/s_cacosf.c> -#include "cfloat-compat.h" - -#undef __cacosf - -c1_cfloat_rettype -__c1_cacosf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_cacosf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_cacosf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_cacosf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (cacosf); diff --git a/sysdeps/alpha/fpu/s_cacoshf.c b/sysdeps/alpha/fpu/s_cacoshf.c deleted file mode 100644 index 6b61d1ddaa..0000000000 --- a/sysdeps/alpha/fpu/s_cacoshf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return arc hyperbole cosine of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __cacoshf __cacoshf_not_defined -#define cacoshf cacoshf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __cacoshf -#undef cacoshf -#define __cacoshf internal_cacoshf - -static _Complex float internal_cacoshf (_Complex float x); - -#include <math/s_cacoshf.c> -#include "cfloat-compat.h" - -#undef __cacoshf - -c1_cfloat_rettype -__c1_cacoshf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_cacoshf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_cacoshf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_cacoshf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (cacoshf); diff --git a/sysdeps/alpha/fpu/s_casinf.c b/sysdeps/alpha/fpu/s_casinf.c deleted file mode 100644 index fd41042ec9..0000000000 --- a/sysdeps/alpha/fpu/s_casinf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return arc sine of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __casinf __casinf_not_defined -#define casinf casinf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __casinf -#undef casinf -#define __casinf internal_casinf - -static _Complex float internal_casinf (_Complex float x); - -#include <math/s_casinf.c> -#include "cfloat-compat.h" - -#undef __casinf - -c1_cfloat_rettype -__c1_casinf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_casinf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_casinf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_casinf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (casinf); diff --git a/sysdeps/alpha/fpu/s_casinhf.c b/sysdeps/alpha/fpu/s_casinhf.c deleted file mode 100644 index 0b72a24d5a..0000000000 --- a/sysdeps/alpha/fpu/s_casinhf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return arc hyperbole sine of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __casinhf __casinhf_not_defined -#define casinhf casinhf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __casinhf -#undef casinhf -#define __casinhf internal_casinhf - -static _Complex float internal_casinhf (_Complex float x); - -#include <math/s_casinhf.c> -#include "cfloat-compat.h" - -#undef __casinhf - -c1_cfloat_rettype -__c1_casinhf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_casinhf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_casinhf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_casinhf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (casinhf); diff --git a/sysdeps/alpha/fpu/s_catanf.c b/sysdeps/alpha/fpu/s_catanf.c deleted file mode 100644 index 8f40616617..0000000000 --- a/sysdeps/alpha/fpu/s_catanf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return arc tangent of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __catanf __catanf_not_defined -#define catanf catanf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __catanf -#undef catanf -#define __catanf internal_catanf - -static _Complex float internal_catanf (_Complex float x); - -#include <math/s_catanf.c> -#include "cfloat-compat.h" - -#undef __catanf - -c1_cfloat_rettype -__c1_catanf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_catanf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_catanf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_catanf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (catanf); diff --git a/sysdeps/alpha/fpu/s_catanhf.c b/sysdeps/alpha/fpu/s_catanhf.c deleted file mode 100644 index ac11945727..0000000000 --- a/sysdeps/alpha/fpu/s_catanhf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return arc hyperbole tangent of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __catanhf __catanhf_not_defined -#define catanhf catanhf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __catanhf -#undef catanhf -#define __catanhf internal_catanhf - -static _Complex float internal_catanhf (_Complex float x); - -#include <math/s_catanhf.c> -#include "cfloat-compat.h" - -#undef __catanhf - -c1_cfloat_rettype -__c1_catanhf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_catanhf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_catanhf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_catanhf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (catanhf); diff --git a/sysdeps/alpha/fpu/s_ccosf.c b/sysdeps/alpha/fpu/s_ccosf.c deleted file mode 100644 index 04036f4613..0000000000 --- a/sysdeps/alpha/fpu/s_ccosf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return cosine of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __ccosf __ccosf_not_defined -#define ccosf ccosf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __ccosf -#undef ccosf -#define __ccosf internal_ccosf - -static _Complex float internal_ccosf (_Complex float x); - -#include <math/s_ccosf.c> -#include "cfloat-compat.h" - -#undef __ccosf - -c1_cfloat_rettype -__c1_ccosf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_ccosf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_ccosf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_ccosf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (ccosf); diff --git a/sysdeps/alpha/fpu/s_ccoshf.c b/sysdeps/alpha/fpu/s_ccoshf.c deleted file mode 100644 index e9fb34ce47..0000000000 --- a/sysdeps/alpha/fpu/s_ccoshf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return hyperbole cosine of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __ccoshf __ccoshf_not_defined -#define ccoshf ccoshf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __ccoshf -#undef ccoshf -#define __ccoshf internal_ccoshf - -static _Complex float internal_ccoshf (_Complex float x); - -#include <math/s_ccoshf.c> -#include "cfloat-compat.h" - -#undef __ccoshf - -c1_cfloat_rettype -__c1_ccoshf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_ccoshf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_ccoshf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_ccoshf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (ccoshf); diff --git a/sysdeps/alpha/fpu/s_ceil.c b/sysdeps/alpha/fpu/s_ceil.c deleted file mode 100644 index 40c2379286..0000000000 --- a/sysdeps/alpha/fpu/s_ceil.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 1998, 2000, 2006, 2007 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <math.h> -#include <math_ldbl_opt.h> - -/* Use the -inf rounding mode conversion instructions to implement - ceil, via something akin to -floor(-x). This is much faster than - playing with the fpcr to achieve +inf rounding mode. */ - -double -__ceil (double x) -{ - double two52 = copysign (0x1.0p52, x); - double r, tmp; - - __asm ( -#ifdef _IEEE_FP_INEXACT - "addt/suim %2, %3, %1\n\tsubt/suim %1, %3, %0" -#else - "addt/sum %2, %3, %1\n\tsubt/sum %1, %3, %0" -#endif - : "=&f"(r), "=&f"(tmp) - : "f"(-x), "f"(-two52)); - - /* Fix up the negation we did above, as well as handling -0 properly. */ - return copysign (r, x); -} - -weak_alias (__ceil, ceil) -#ifdef NO_LONG_DOUBLE -strong_alias (__ceil, __ceill) -weak_alias (__ceil, ceill) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __ceil, ceill, GLIBC_2_0); -#endif diff --git a/sysdeps/alpha/fpu/s_ceilf.c b/sysdeps/alpha/fpu/s_ceilf.c deleted file mode 100644 index 0df651f405..0000000000 --- a/sysdeps/alpha/fpu/s_ceilf.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 1998, 2000, 2007 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <math.h> - -/* Use the -inf rounding mode conversion instructions to implement - ceil, via something akin to -floor(-x). This is much faster than - playing with the fpcr to achieve +inf rounding mode. */ - -float -__ceilf (float x) -{ - float two23 = copysignf (0x1.0p23, x); - float r, tmp; - - __asm ( -#ifdef _IEEE_FP_INEXACT - "adds/suim %2, %3, %1\n\tsubs/suim %1, %3, %0" -#else - "adds/sum %2, %3, %1\n\tsubs/sum %1, %3, %0" -#endif - : "=&f"(r), "=&f"(tmp) - : "f"(-x), "f"(-two23)); - - /* Fix up the negation we did above, as well as handling -0 properly. */ - return copysignf (r, x); -} - -weak_alias (__ceilf, ceilf) diff --git a/sysdeps/alpha/fpu/s_cexpf.c b/sysdeps/alpha/fpu/s_cexpf.c deleted file mode 100644 index 4a28dcd9bf..0000000000 --- a/sysdeps/alpha/fpu/s_cexpf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return exponent of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __cexpf __cexpf_not_defined -#define cexpf cexpf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __cexpf -#undef cexpf -#define __cexpf internal_cexpf - -static _Complex float internal_cexpf (_Complex float x); - -#include <math/s_cexpf.c> -#include "cfloat-compat.h" - -#undef __cexpf - -c1_cfloat_rettype -__c1_cexpf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_cexpf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_cexpf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_cexpf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (cexpf); diff --git a/sysdeps/alpha/fpu/s_clog10f.c b/sysdeps/alpha/fpu/s_clog10f.c deleted file mode 100644 index e7dc7bb23f..0000000000 --- a/sysdeps/alpha/fpu/s_clog10f.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Return base 10 logarithm of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __clog10f __clog10f_not_defined -#define clog10f clog10f_not_defined - -#include <complex.h> -#include <math.h> - -#undef __clog10f -#undef clog10f -#define __clog10f internal_clog10f - -static _Complex float internal_clog10f (_Complex float x); - -#include <math/s_clog10f.c> -#include "cfloat-compat.h" - -#undef __clog10f - -c1_cfloat_rettype -__c1_clog10f (c1_cfloat_decl (x)) -{ - _Complex float r = internal_clog10f (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_clog10f (c2_cfloat_decl (x)) -{ - _Complex float r = internal_clog10f (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -/* Ug. __clog10f was exported from GLIBC_2.1. This is the only - complex function whose double-underscore symbol was exported, - so we get to handle that specially. */ -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_3_4) -strong_alias (__c1_clog10f, __c1_clog10f_2); -compat_symbol (libm, __c1_clog10f, clog10f, GLIBC_2_1); -compat_symbol (libm, __c1_clog10f_2, __clog10f, GLIBC_2_1); -#endif -versioned_symbol (libm, __c2_clog10f, clog10f, GLIBC_2_3_4); -extern typeof(__c2_clog10f) __clog10f attribute_hidden; -strong_alias (__c2_clog10f, __clog10f) diff --git a/sysdeps/alpha/fpu/s_clogf.c b/sysdeps/alpha/fpu/s_clogf.c deleted file mode 100644 index 364dcec883..0000000000 --- a/sysdeps/alpha/fpu/s_clogf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return natural logarithm of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __clogf __clogf_not_defined -#define clogf clogf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __clogf -#undef clogf -#define __clogf internal_clogf - -static _Complex float internal_clogf (_Complex float x); - -#include <math/s_clogf.c> -#include "cfloat-compat.h" - -#undef __clogf - -c1_cfloat_rettype -__c1_clogf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_clogf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_clogf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_clogf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (clogf); diff --git a/sysdeps/alpha/fpu/s_copysign.c b/sysdeps/alpha/fpu/s_copysign.c deleted file mode 100644 index 52c632ec4c..0000000000 --- a/sysdeps/alpha/fpu/s_copysign.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2000, 2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <math.h> -#include <math_ldbl_opt.h> - -double -__copysign (double x, double y) -{ - __asm ("cpys %1, %2, %0" : "=f" (x) : "f" (y), "f" (x)); - return x; -} - -weak_alias (__copysign, copysign) -#ifdef NO_LONG_DOUBLE -strong_alias (__copysign, __copysignl) -weak_alias (__copysign, copysignl) -#endif -#ifdef IS_IN_libm -# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __copysign, copysignl, GLIBC_2_0); -# endif -#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __copysign, copysignl, GLIBC_2_0); -#endif diff --git a/sysdeps/alpha/fpu/s_copysignf.c b/sysdeps/alpha/fpu/s_copysignf.c deleted file mode 100644 index f4b846bcbe..0000000000 --- a/sysdeps/alpha/fpu/s_copysignf.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <math.h> - -float -__copysignf (float x, float y) -{ - __asm ("cpys %1, %2, %0" : "=f" (x) : "f" (y), "f" (x)); - return x; -} - -weak_alias (__copysignf, copysignf) diff --git a/sysdeps/alpha/fpu/s_cpowf.c b/sysdeps/alpha/fpu/s_cpowf.c deleted file mode 100644 index cc61b1895e..0000000000 --- a/sysdeps/alpha/fpu/s_cpowf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return power of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __cpowf __cpowf_not_defined -#define cpowf cpowf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __cpowf -#undef cpowf -#define __cpowf internal_cpowf - -static _Complex float internal_cpowf (_Complex float x, _Complex float c); - -#include <math/s_cpowf.c> -#include "cfloat-compat.h" - -#undef __cpowf - -c1_cfloat_rettype -__c1_cpowf (c1_cfloat_decl (x), c1_cfloat_decl (c)) -{ - _Complex float r = internal_cpowf (c1_cfloat_value (x), c1_cfloat_value (c)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_cpowf (c2_cfloat_decl (x), c2_cfloat_decl (c)) -{ - _Complex float r = internal_cpowf (c2_cfloat_value (x), c2_cfloat_value (c)); - return c2_cfloat_return (r); -} - -cfloat_versions (cpowf); diff --git a/sysdeps/alpha/fpu/s_cprojf.c b/sysdeps/alpha/fpu/s_cprojf.c deleted file mode 100644 index 5cfb526679..0000000000 --- a/sysdeps/alpha/fpu/s_cprojf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return projection of complex float value to Riemann sphere. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __cprojf __cprojf_not_defined -#define cprojf cprojf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __cprojf -#undef cprojf -#define __cprojf internal_cprojf - -static _Complex float internal_cprojf (_Complex float x); - -#include <math/s_cprojf.c> -#include "cfloat-compat.h" - -#undef __cprojf - -c1_cfloat_rettype -__c1_cprojf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_cprojf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_cprojf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_cprojf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (cprojf); diff --git a/sysdeps/alpha/fpu/s_csinf.c b/sysdeps/alpha/fpu/s_csinf.c deleted file mode 100644 index 8eb9a1019d..0000000000 --- a/sysdeps/alpha/fpu/s_csinf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return sine of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __csinf __csinf_not_defined -#define csinf csinf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __csinf -#undef csinf -#define __csinf internal_csinf - -static _Complex float internal_csinf (_Complex float x); - -#include <math/s_csinf.c> -#include "cfloat-compat.h" - -#undef __csinf - -c1_cfloat_rettype -__c1_csinf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_csinf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_csinf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_csinf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (csinf); diff --git a/sysdeps/alpha/fpu/s_csinhf.c b/sysdeps/alpha/fpu/s_csinhf.c deleted file mode 100644 index 0e2c186740..0000000000 --- a/sysdeps/alpha/fpu/s_csinhf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return hyperbole sine of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __csinhf __csinhf_not_defined -#define csinhf csinhf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __csinhf -#undef csinhf -#define __csinhf internal_csinhf - -static _Complex float internal_csinhf (_Complex float x); - -#include <math/s_csinhf.c> -#include "cfloat-compat.h" - -#undef __csinhf - -c1_cfloat_rettype -__c1_csinhf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_csinhf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_csinhf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_csinhf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (csinhf); diff --git a/sysdeps/alpha/fpu/s_csqrtf.c b/sysdeps/alpha/fpu/s_csqrtf.c deleted file mode 100644 index ebf23a828e..0000000000 --- a/sysdeps/alpha/fpu/s_csqrtf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return square root of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __csqrtf __csinhf_not_defined -#define csqrtf csqrtf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __csqrtf -#undef csqrtf -#define __csqrtf internal_csqrtf - -static _Complex float internal_csqrtf (_Complex float x); - -#include <math/s_csqrtf.c> -#include "cfloat-compat.h" - -#undef __csqrtf - -c1_cfloat_rettype -__c1_csqrtf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_csqrtf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_csqrtf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_csqrtf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (csqrtf); diff --git a/sysdeps/alpha/fpu/s_ctanf.c b/sysdeps/alpha/fpu/s_ctanf.c deleted file mode 100644 index e26db963e4..0000000000 --- a/sysdeps/alpha/fpu/s_ctanf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return tangent of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __ctanf __ctanf_not_defined -#define ctanf ctanf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __ctanf -#undef ctanf -#define __ctanf internal_ctanf - -static _Complex float internal_ctanf (_Complex float x); - -#include <math/s_ctanf.c> -#include "cfloat-compat.h" - -#undef __ctanf - -c1_cfloat_rettype -__c1_ctanf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_ctanf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_ctanf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_ctanf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (ctanf); diff --git a/sysdeps/alpha/fpu/s_ctanhf.c b/sysdeps/alpha/fpu/s_ctanhf.c deleted file mode 100644 index 5d047bd460..0000000000 --- a/sysdeps/alpha/fpu/s_ctanhf.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Return hyperbole tangent of complex float value. - Copyright (C) 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __ctanhf __ctanhf_not_defined -#define ctanhf ctanhf_not_defined - -#include <complex.h> -#include <math.h> - -#undef __ctanhf -#undef ctanhf -#define __ctanhf internal_ctanhf - -static _Complex float internal_ctanhf (_Complex float x); - -#include <math/s_ctanhf.c> -#include "cfloat-compat.h" - -#undef __ctanhf - -c1_cfloat_rettype -__c1_ctanhf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_ctanhf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_ctanhf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_ctanhf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (ctanhf); diff --git a/sysdeps/alpha/fpu/s_fabs.c b/sysdeps/alpha/fpu/s_fabs.c deleted file mode 100644 index 9bc42f68d0..0000000000 --- a/sysdeps/alpha/fpu/s_fabs.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2000, 2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <math.h> -#include <math_ldbl_opt.h> - -double -__fabs (double x) -{ -#if __GNUC_PREREQ (2, 8) - return __builtin_fabs (x); -#else - __asm ("cpys $f31, %1, %0" : "=f" (x) : "f" (x)); - return x; -#endif -} - -weak_alias (__fabs, fabs) -#ifdef NO_LONG_DOUBLE -strong_alias (__fabs, __fabsl) -weak_alias (__fabs, fabsl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __fabs, fabsl, GLIBC_2_0); -#endif diff --git a/sysdeps/alpha/fpu/s_fabsf.c b/sysdeps/alpha/fpu/s_fabsf.c deleted file mode 100644 index 35e16bf65d..0000000000 --- a/sysdeps/alpha/fpu/s_fabsf.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <math.h> - -float -__fabsf (float x) -{ -#if __GNUC_PREREQ (2, 8) - return __builtin_fabsf (x); -#else - __asm ("cpys $f31, %1, %0" : "=f" (x) : "f" (x)); - return x; -#endif -} - -weak_alias (__fabsf, fabsf) diff --git a/sysdeps/alpha/fpu/s_floor.c b/sysdeps/alpha/fpu/s_floor.c deleted file mode 100644 index 5af6386155..0000000000 --- a/sysdeps/alpha/fpu/s_floor.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 1998, 1999, 2000, 2006, 2007 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <math.h> -#include <math_ldbl_opt.h> - - -/* Use the -inf rounding mode conversion instructions to implement floor. */ - -double -__floor (double x) -{ - double two52 = copysign (0x1.0p52, x); - double r, tmp; - - __asm ( -#ifdef _IEEE_FP_INEXACT - "addt/suim %2, %3, %1\n\tsubt/suim %1, %3, %0" -#else - "addt/sum %2, %3, %1\n\tsubt/sum %1, %3, %0" -#endif - : "=&f"(r), "=&f"(tmp) - : "f"(x), "f"(two52)); - - /* floor(-0) == -0, and in general we'll always have the same - sign as our input. */ - return copysign (r, x); -} - -weak_alias (__floor, floor) -#ifdef NO_LONG_DOUBLE -strong_alias (__floor, __floorl) -weak_alias (__floor, floorl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __floor, floorl, GLIBC_2_0); -#endif diff --git a/sysdeps/alpha/fpu/s_floorf.c b/sysdeps/alpha/fpu/s_floorf.c deleted file mode 100644 index 8b421705cd..0000000000 --- a/sysdeps/alpha/fpu/s_floorf.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 1998, 1999, 2000, 2007 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <math.h> - - -/* Use the -inf rounding mode conversion instructions to implement floor. */ - -float -__floorf (float x) -{ - float two23 = copysignf (0x1.0p23, x); - float r, tmp; - - __asm ( -#ifdef _IEEE_FP_INEXACT - "adds/suim %2, %3, %1\n\tsubs/suim %1, %3, %0" -#else - "adds/sum %2, %3, %1\n\tsubs/sum %1, %3, %0" -#endif - : "=&f"(r), "=&f"(tmp) - : "f"(x), "f"(two23)); - - /* floor(-0) == -0, and in general we'll always have the same - sign as our input. */ - return copysignf (r, x); -} - -weak_alias (__floorf, floorf) diff --git a/sysdeps/alpha/fpu/s_fmax.S b/sysdeps/alpha/fpu/s_fmax.S deleted file mode 100644 index d638eec805..0000000000 --- a/sysdeps/alpha/fpu/s_fmax.S +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2007 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#include <math_ldbl_opt.h> - - .set noat - .set noreorder - - .text -ENTRY (__fmax) - .prologue 0 - - cmptun/su $f16, $f16, $f10 - cmptun/su $f17, $f17, $f11 - fmov $f17, $f0 - unop - - trapb - fbne $f10, $ret - fmov $f16, $f0 - fbne $f11, $ret - - cmptlt/su $f16, $f17, $f11 - trapb - fcmovne $f11, $f17, $f0 -$ret: ret - -END (__fmax) - -/* Given the in-register format of single-precision, this works there too. */ -strong_alias (__fmax, __fmaxf) -weak_alias (__fmaxf, fmaxf) - -weak_alias (__fmax, fmax) -#ifdef NO_LONG_DOUBLE -strong_alias (__fmax, __fmaxl) -weak_alias (__fmaxl, fmaxl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __fmax, fmaxl, GLIBC_2_1); -#endif diff --git a/sysdeps/alpha/fpu/s_fmaxf.S b/sysdeps/alpha/fpu/s_fmaxf.S deleted file mode 100644 index 3c2d62bb81..0000000000 --- a/sysdeps/alpha/fpu/s_fmaxf.S +++ /dev/null @@ -1 +0,0 @@ -/* __fmaxf is in s_fmax.c */ diff --git a/sysdeps/alpha/fpu/s_fmin.S b/sysdeps/alpha/fpu/s_fmin.S deleted file mode 100644 index d70fab625a..0000000000 --- a/sysdeps/alpha/fpu/s_fmin.S +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2007 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#include <math_ldbl_opt.h> - - .set noat - .set noreorder - - .text -ENTRY (__fmin) - .prologue 0 - - cmptun/su $f16, $f16, $f10 - cmptun/su $f17, $f17, $f11 - fmov $f17, $f0 - unop - - trapb - fbne $f10, $ret - fmov $f16, $f0 - fbne $f11, $ret - - cmptlt/su $f17, $f16, $f11 - trapb - fcmovne $f11, $f17, $f0 -$ret: ret - -END (__fmin) - -/* Given the in-register format of single-precision, this works there too. */ -strong_alias (__fmin, __fminf) -weak_alias (__fminf, fminf) - -weak_alias (__fmin, fmin) -#ifdef NO_LONG_DOUBLE -strong_alias (__fmin, __fminl) -weak_alias (__fminl, fminl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __fmin, fminl, GLIBC_2_1); -#endif diff --git a/sysdeps/alpha/fpu/s_fminf.S b/sysdeps/alpha/fpu/s_fminf.S deleted file mode 100644 index 10ab7fe53c..0000000000 --- a/sysdeps/alpha/fpu/s_fminf.S +++ /dev/null @@ -1 +0,0 @@ -/* __fminf is in s_fmin.c */ diff --git a/sysdeps/alpha/fpu/s_isnan.c b/sysdeps/alpha/fpu/s_isnan.c deleted file mode 100644 index a9230329c5..0000000000 --- a/sysdeps/alpha/fpu/s_isnan.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Return 1 if argument is a NaN, else 0. - Copyright (C) 2007 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Ugly kludge to avoid declarations. */ -#define __isnanf not___isnanf -#define isnanf not_isnanf -#define __GI___isnanf not__GI___isnanf - -#include <math.h> -#include <math_ldbl_opt.h> - -#undef __isnanf -#undef isnanf -#undef __GI___isnanf - -/* The hidden_proto in include/math.h was obscured by the macro hackery. */ -__typeof (__isnan) __isnanf; -hidden_proto (__isnanf) - - -int -__isnan (double x) -{ - return isunordered (x, x); -} - -hidden_def (__isnan) -weak_alias (__isnan, isnan) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__isnan, __isnanf) -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isnan, __isnanl) -weak_alias (__isnan, isnanl) -#endif -#if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -compat_symbol (libc, isnan, isnanl, GLIBC_2_0); -#endif diff --git a/sysdeps/alpha/fpu/s_isnanf.c b/sysdeps/alpha/fpu/s_isnanf.c deleted file mode 100644 index af41e43850..0000000000 --- a/sysdeps/alpha/fpu/s_isnanf.c +++ /dev/null @@ -1 +0,0 @@ -/* In s_isnan.c */ diff --git a/sysdeps/alpha/fpu/s_llrint.c b/sysdeps/alpha/fpu/s_llrint.c deleted file mode 100644 index 5db97be037..0000000000 --- a/sysdeps/alpha/fpu/s_llrint.c +++ /dev/null @@ -1 +0,0 @@ -/* In s_lrint.c */ diff --git a/sysdeps/alpha/fpu/s_llrintf.c b/sysdeps/alpha/fpu/s_llrintf.c deleted file mode 100644 index 18f2885ef7..0000000000 --- a/sysdeps/alpha/fpu/s_llrintf.c +++ /dev/null @@ -1 +0,0 @@ -/* In s_lrintf.c */ diff --git a/sysdeps/alpha/fpu/s_llround.c b/sysdeps/alpha/fpu/s_llround.c deleted file mode 100644 index b212fbd8e5..0000000000 --- a/sysdeps/alpha/fpu/s_llround.c +++ /dev/null @@ -1 +0,0 @@ -/* In s_lround.c. */ diff --git a/sysdeps/alpha/fpu/s_llroundf.c b/sysdeps/alpha/fpu/s_llroundf.c deleted file mode 100644 index 73bdf3103f..0000000000 --- a/sysdeps/alpha/fpu/s_llroundf.c +++ /dev/null @@ -1 +0,0 @@ -/* In s_lroundf.c. */ diff --git a/sysdeps/alpha/fpu/s_lrint.c b/sysdeps/alpha/fpu/s_lrint.c deleted file mode 100644 index 1696408705..0000000000 --- a/sysdeps/alpha/fpu/s_lrint.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2007 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __llrint not___llrint -#define llrint not_llrint -#include <math.h> -#include <math_ldbl_opt.h> -#undef __llrint -#undef llrint - -long int -__lrint (double x) -{ - long ret; - - __asm ("cvttq/svd %1,%0" : "=&f"(ret) : "f"(x)); - - return ret; -} - -strong_alias (__lrint, __llrint) -weak_alias (__lrint, lrint) -weak_alias (__llrint, llrint) -#ifdef NO_LONG_DOUBLE -strong_alias (__lrint, __lrintl) -strong_alias (__lrint, __llrintl) -weak_alias (__lrintl, lrintl) -weak_alias (__llrintl, llrintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __lrint, lrintl, GLIBC_2_1); -compat_symbol (libm, __llrint, llrintl, GLIBC_2_1); -#endif diff --git a/sysdeps/alpha/fpu/s_lrintf.c b/sysdeps/alpha/fpu/s_lrintf.c deleted file mode 100644 index 20a6a6cf82..0000000000 --- a/sysdeps/alpha/fpu/s_lrintf.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2007 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __llrintf not___llrintf -#define llrintf not_llrintf -#include <math.h> -#undef __llrintf -#undef llrintf - -long int -__lrintf (float x) -{ - double tmp; - long ret; - - __asm ("cvtst/s %2,%1\n\tcvttq/svd %1,%0" - : "=&f"(ret), "=&f"(tmp) : "f"(x)); - - return ret; -} - -strong_alias (__lrintf, __llrintf) -weak_alias (__lrintf, lrintf) -weak_alias (__llrintf, llrintf) diff --git a/sysdeps/alpha/fpu/s_lround.c b/sysdeps/alpha/fpu/s_lround.c deleted file mode 100644 index 0e0e98806c..0000000000 --- a/sysdeps/alpha/fpu/s_lround.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2007 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __llround not___llround -#define llround not_llround -#include <math.h> -#include <math_ldbl_opt.h> -#undef __llround -#undef llround - -long int -__lround (double x) -{ - double adj; - - adj = 0x1.fffffffffffffp-2; /* nextafter (0.5, 0.0) */ - adj = copysign (adj, x); - return x + adj; -} - -strong_alias (__lround, __llround) -weak_alias (__lround, lround) -weak_alias (__llround, llround) -#ifdef NO_LONG_DOUBLE -strong_alias (__lround, __lroundl) -strong_alias (__lround, __llroundl) -weak_alias (__lroundl, lroundl) -weak_alias (__llroundl, llroundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __lround, lroundl, GLIBC_2_1); -compat_symbol (libm, __llround, llroundl, GLIBC_2_1); -#endif diff --git a/sysdeps/alpha/fpu/s_lroundf.c b/sysdeps/alpha/fpu/s_lroundf.c deleted file mode 100644 index 16ff348b21..0000000000 --- a/sysdeps/alpha/fpu/s_lroundf.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2007 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __llroundf not___llroundf -#define llroundf not_llroundf -#include <math.h> -#undef __llroundf -#undef llroundf - - -long int -__lroundf (float x) -{ - float adj; - - adj = 0x1.fffffep-2; /* nextafterf (0.5f, 0.0f) */ - adj = copysignf (adj, x); - return x + adj; -} - -strong_alias (__lroundf, __llroundf) -weak_alias (__lroundf, lroundf) -weak_alias (__llroundf, llroundf) diff --git a/sysdeps/alpha/fpu/s_nearbyint.c b/sysdeps/alpha/fpu/s_nearbyint.c deleted file mode 100644 index b18db8ba79..0000000000 --- a/sysdeps/alpha/fpu/s_nearbyint.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2007 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <math.h> -#include <math_ldbl_opt.h> - -#ifdef _IEEE_FP_INEXACT -#error "Don't compile with -mieee-with-inexact" -#endif - -double -__nearbyint (double x) -{ - double two52 = copysign (0x1.0p52, x); - double r; - - r = x + two52; - r = r - two52; - - /* nearbyint(-0.1) == -0, and in general we'll always have the same sign - as our input. */ - return copysign (r, x); -} - -weak_alias (__nearbyint, nearbyint) -#ifdef NO_LONG_DOUBLE -strong_alias (__nearbyint, __nearbyintl) -weak_alias (__nearbyint, nearbyintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __nearbyint, nearbyintl, GLIBC_2_1); -#endif diff --git a/sysdeps/alpha/fpu/s_nearbyintf.c b/sysdeps/alpha/fpu/s_nearbyintf.c deleted file mode 100644 index ee637982df..0000000000 --- a/sysdeps/alpha/fpu/s_nearbyintf.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2007 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <math.h> - -#ifdef _IEEE_FP_INEXACT -#error "Don't compile with -mieee-with-inexact" -#endif - -float -__nearbyintf (float x) -{ - float two23 = copysignf (0x1.0p23, x); - float r; - - r = x + two23; - r = r - two23; - - /* nearbyint(-0.1) == -0, and in general we'll always have the same sign - as our input. */ - return copysign (r, x); -} - -weak_alias (__nearbyintf, nearbyintf) diff --git a/sysdeps/alpha/fpu/s_rint.c b/sysdeps/alpha/fpu/s_rint.c deleted file mode 100644 index e9aa028822..0000000000 --- a/sysdeps/alpha/fpu/s_rint.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2000, 2006, 2007 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <math.h> -#include <math_ldbl_opt.h> - - -double -__rint (double x) -{ - double two52 = copysign (0x1.0p52, x); - double r; - - r = x + two52; - r = r - two52; - - /* rint(-0.1) == -0, and in general we'll always have the same sign - as our input. */ - return copysign (r, x); -} - -weak_alias (__rint, rint) -#ifdef NO_LONG_DOUBLE -strong_alias (__rint, __rintl) -weak_alias (__rint, rintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __rint, rintl, GLIBC_2_0); -#endif diff --git a/sysdeps/alpha/fpu/s_rintf.c b/sysdeps/alpha/fpu/s_rintf.c deleted file mode 100644 index 9e4cbd1ffd..0000000000 --- a/sysdeps/alpha/fpu/s_rintf.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2000, 2007 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <math.h> - - -float -__rintf (float x) -{ - float two23 = copysignf (0x1.0p23, x); - float r; - - r = x + two23; - r = r - two23; - - /* rint(-0.1) == -0, and in general we'll always have the same sign - as our input. */ - return copysign (r, x); -} - -weak_alias (__rintf, rintf) diff --git a/sysdeps/alpha/fpu/s_round.c b/sysdeps/alpha/fpu/s_round.c deleted file mode 100644 index 71763cf4ab..0000000000 --- a/sysdeps/alpha/fpu/s_round.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2007 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <math.h> -#include <math_ldbl_opt.h> - - -double -__round (double x) -{ - const double almost_half = 0x1.fffffffffffffp-2; - const double two52 = 0x1.0p52; - double tmp, r; - - __asm ( -#ifdef _IEEE_FP_INEXACT - "addt/suic %2, %3, %1\n\tsubt/suic %1, %3, %0" -#else - "addt/suc %2, %3, %1\n\tsubt/suc %1, %3, %0" -#endif - : "=&f"(r), "=&f"(tmp) - : "f"(fabs (x) + almost_half), "f"(two52)); - - return copysign (r, x); -} - -weak_alias (__round, round) -#ifdef NO_LONG_DOUBLE -strong_alias (__round, __roundl) -weak_alias (__roundl, roundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __round, roundl, GLIBC_2_1); -#endif diff --git a/sysdeps/alpha/fpu/s_roundf.c b/sysdeps/alpha/fpu/s_roundf.c deleted file mode 100644 index 89584f062b..0000000000 --- a/sysdeps/alpha/fpu/s_roundf.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2007 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <math.h> - - -float -__roundf (float x) -{ - const float almost_half = 0x1.fffffep-2; - const float two23 = 0x1.0p23; - float r, tmp; - - __asm ( -#ifdef _IEEE_FP_INEXACT - "adds/suic %2, %3, %1\n\tsubs/suic %1, %3, %0" -#else - "adds/suc %2, %3, %1\n\tsubs/suc %1, %3, %0" -#endif - : "=&f"(r), "=&f"(tmp) - : "f"(fabsf (x) + almost_half), "f"(two23)); - - /* round(-0) == -0, and in general we'll always have the same - sign as our input. */ - return copysignf (r, x); -} - -weak_alias (__roundf, roundf) diff --git a/sysdeps/alpha/fpu/s_trunc.c b/sysdeps/alpha/fpu/s_trunc.c deleted file mode 100644 index 11a279a53f..0000000000 --- a/sysdeps/alpha/fpu/s_trunc.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2007 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <math.h> -#include <math_ldbl_opt.h> - - -/* Use the chopped rounding mode conversion instructions to implement trunc. */ - -double -__trunc (double x) -{ - double two52 = copysign (0x1.0p52, x); - double r, tmp; - - __asm ( -#ifdef _IEEE_FP_INEXACT - "addt/suic %2, %3, %1\n\tsubt/suic %1, %3, %0" -#else - "addt/suc %2, %3, %1\n\tsubt/suc %1, %3, %0" -#endif - : "=&f"(r), "=&f"(tmp) - : "f"(x), "f"(two52)); - - /* trunc(-0) == -0, and in general we'll always have the same - sign as our input. */ - return copysign (r, x); -} - -weak_alias (__trunc, trunc) -#ifdef NO_LONG_DOUBLE -strong_alias (__trunc, __truncl) -weak_alias (__trunc, truncl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __trunc, truncl, GLIBC_2_1); -#endif diff --git a/sysdeps/alpha/fpu/s_truncf.c b/sysdeps/alpha/fpu/s_truncf.c deleted file mode 100644 index 094997b433..0000000000 --- a/sysdeps/alpha/fpu/s_truncf.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2007 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <math.h> - - -/* Use the chopped rounding mode conversion instructions to implement trunc. */ - -float -__truncf (float x) -{ - float two23 = copysignf (0x1.0p23, x); - float r, tmp; - - __asm ( -#ifdef _IEEE_FP_INEXACT - "adds/suic %2, %3, %1\n\tsubs/suic %1, %3, %0" -#else - "adds/suc %2, %3, %1\n\tsubs/suc %1, %3, %0" -#endif - : "=&f"(r), "=&f"(tmp) - : "f"(x), "f"(two23)); - - /* trunc(-0) == -0, and in general we'll always have the same - sign as our input. */ - return copysignf (r, x); -} - -weak_alias (__truncf, truncf) diff --git a/sysdeps/alpha/gccframe.h b/sysdeps/alpha/gccframe.h deleted file mode 100644 index b67022548f..0000000000 --- a/sysdeps/alpha/gccframe.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Definition of object in frame unwind info. alpha version. - Copyright (C) 2001 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define FIRST_PSEUDO_REGISTER 64 - -#include <sysdeps/generic/gccframe.h> diff --git a/sysdeps/alpha/hp-timing.h b/sysdeps/alpha/hp-timing.h deleted file mode 100644 index ccae06b487..0000000000 --- a/sysdeps/alpha/hp-timing.h +++ /dev/null @@ -1,118 +0,0 @@ -/* High precision, low overhead timing functions. Alpha version. - Copyright (C) 2001 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@redhat.com>, 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _HP_TIMING_H -#define _HP_TIMING_H 1 - -#include <string.h> -#include <sys/param.h> -#include <stdio-common/_itoa.h> - -/* The macros defined here use the timestamp counter in IA-64. They - provide a very accurate way to measure the time with very little - overhead. The time values themself have no real meaning, only - differences are interesting. - - The list of macros we need includes the following: - - - HP_TIMING_AVAIL: test for availability. - - - HP_TIMING_INLINE: this macro is non-zero if the functionality is not - implemented using function calls but instead uses some inlined code - which might simply consist of a few assembler instructions. We have to - know this since we might want to use the macros here in places where we - cannot make function calls. - - - hp_timing_t: This is the type for variables used to store the time - values. - - - HP_TIMING_ZERO: clear `hp_timing_t' object. - - - HP_TIMING_NOW: place timestamp for current time in variable given as - parameter. - - - HP_TIMING_DIFF_INIT: do whatever is necessary to be able to use the - HP_TIMING_DIFF macro. - - - HP_TIMING_DIFF: compute difference between two times and store it - in a third. Source and destination might overlap. - - - HP_TIMING_ACCUM: add time difference to another variable. This might - be a bit more complicated to implement for some platforms as the - operation should be thread-safe and 64bit arithmetic on 32bit platforms - is not. - - - HP_TIMING_ACCUM_NT: this is the variant for situations where we know - there are no threads involved. - - - HP_TIMING_PRINT: write decimal representation of the timing value into - the given string. This operation need not be inline even though - HP_TIMING_INLINE is specified. -*/ - -/* We always have the timestamp register, but it's got only a 4 second - range. Use it for ld.so profiling only. */ -#define HP_TIMING_AVAIL (0) -#define HP_SMALL_TIMING_AVAIL (1) - -/* We indeed have inlined functions. */ -#define HP_TIMING_INLINE (1) - -/* We use 32 bit values for the times. */ -typedef unsigned int hp_timing_t; - -/* Set timestamp value to zero. */ -#define HP_TIMING_ZERO(VAR) (VAR) = (0) - -/* The "rpcc" instruction returns a 32-bit counting half and a 32-bit - "virtual cycle counter displacement". Subtracting the two gives us - a virtual cycle count. */ -#define HP_TIMING_NOW(VAR) \ - do { \ - unsigned long int x_; \ - asm volatile ("rpcc %0" : "=r"(x_)); \ - (VAR) = (int) (x_) - (int) (x_ >> 32); \ - } while (0) - -/* ??? Two rpcc instructions can be scheduled simultaneously. */ -#define HP_TIMING_DIFF_INIT() do { } while (0) - -/* It's simple arithmetic for us. */ -#define HP_TIMING_DIFF(Diff, Start, End) (Diff) = ((End) - (Start)) - -/* ??? Don't bother, since we're only used for ld.so. */ -#define HP_TIMING_ACCUM(Sum, Diff) not implemented - -/* No threads, no extra work. */ -#define HP_TIMING_ACCUM_NT(Sum, Diff) (Sum) += (Diff) - -/* Print the time value. */ -#define HP_TIMING_PRINT(Buf, Len, Val) \ - do { \ - char __buf[20]; \ - char *__cp = _itoa_word (Val, __buf + sizeof (__buf), 10, 0); \ - int __len = (Len); \ - char *__dest = (Buf); \ - while (__len-- > 0 && __cp < __buf + sizeof (__buf)) \ - *__dest++ = *__cp++; \ - memcpy (__dest, " clock cycles", MIN (__len, sizeof (" clock cycles"))); \ - } while (0) - -#endif /* hp-timing.h */ diff --git a/sysdeps/alpha/htonl.S b/sysdeps/alpha/htonl.S deleted file mode 100644 index ef2a575995..0000000000 --- a/sysdeps/alpha/htonl.S +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 1996, 1997, 1998, 2000 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> - -ENTRY(htonl) -#ifdef PROF - ldgp gp, 0(pv) - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at - .prologue 1 -#else - .prologue 0 -#endif - - inslh a0, 7, t0 # t0 = 0000000000AABBCC - inswl a0, 3, t1 # t1 = 000000CCDD000000 - or t1, t0, t1 # t1 = 000000CCDDAABBCC - srl t1, 16, t2 # t2 = 0000000000CCDDAA - zapnot t1, 0x0A, t0 # t0 = 00000000DD00BB00 - zapnot t2, 0x05, t3 # t3 = 0000000000CC00AA - addl t0, t3, v0 # v0 = ssssssssDDCCBBAA - ret - - END(htonl) - -weak_alias (htonl, ntohl) diff --git a/sysdeps/alpha/htons.S b/sysdeps/alpha/htons.S deleted file mode 100644 index 7c6270226d..0000000000 --- a/sysdeps/alpha/htons.S +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 1996, 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> - -ENTRY(htons) -#ifdef PROF - ldgp gp, 0(pv) - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at - .prologue 1 -#else - .prologue 0 -#endif - - extwh a0, 7, t1 # t1 = bb00 - extbl a0, 1, v0 # v0 = 00aa - bis v0, t1, v0 # v0 = bbaa - ret - - END(htons) - -weak_alias (htons, ntohs) diff --git a/sysdeps/alpha/jmpbuf-offsets.h b/sysdeps/alpha/jmpbuf-offsets.h deleted file mode 100644 index c2503d442a..0000000000 --- a/sysdeps/alpha/jmpbuf-offsets.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Private macros for accessing __jmp_buf contents. Alpha version. - Copyright (C) 2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define JB_S0 0 -#define JB_S1 1 -#define JB_S2 2 -#define JB_S3 3 -#define JB_S4 4 -#define JB_S5 5 -#define JB_PC 6 -#define JB_FP 7 -#define JB_SP 8 -#define JB_F2 9 -#define JB_F3 10 -#define JB_F4 11 -#define JB_F5 12 -#define JB_F6 13 -#define JB_F7 14 -#define JB_F8 15 -#define JB_F9 16 diff --git a/sysdeps/alpha/jmpbuf-unwind.h b/sysdeps/alpha/jmpbuf-unwind.h deleted file mode 100644 index ca5f693d5d..0000000000 --- a/sysdeps/alpha/jmpbuf-unwind.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <setjmp.h> -#include <jmpbuf-offsets.h> -#include <stdint.h> -#include <unwind.h> -#include <sysdep.h> - -/* Test if longjmp to JMPBUF would unwind the frame containing a local - variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(_jmpbuf, _address, _demangle) \ - ((void *)(_address) < (void *) _demangle ((_jmpbuf)[JB_SP])) - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) - -static inline uintptr_t __attribute__ ((unused)) -_jmpbuf_sp (__jmp_buf regs) -{ - uintptr_t sp = regs[JB_SP]; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (sp); -#endif - return sp; -} - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) - -/* We use the normal longjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/alpha/ldiv.S b/sysdeps/alpha/ldiv.S deleted file mode 100644 index 0a971a7ed0..0000000000 --- a/sysdeps/alpha/ldiv.S +++ /dev/null @@ -1,218 +0,0 @@ -/* Copyright (C) 1996, 1997, 2001, 2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "div_libc.h" - -#undef FRAME -#ifdef __alpha_fix__ -#define FRAME 0 -#else -#define FRAME 16 -#endif - -#undef X -#undef Y -#define X $17 -#define Y $18 - - .set noat - - .align 4 - .globl ldiv - .ent ldiv -ldiv: - .frame sp, FRAME, ra -#if FRAME > 0 - lda sp, -FRAME(sp) -#endif -#ifdef PROF - .set macro - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .set nomacro - .prologue 1 -#else - .prologue 0 -#endif - - beq Y, $divbyzero - excb - mf_fpcr $f10 - - _ITOFT2 X, $f0, 0, Y, $f1, 8 - - .align 4 - cvtqt $f0, $f0 - cvtqt $f1, $f1 - divt/c $f0, $f1, $f0 - unop - - /* Check to see if X fit in the double as an exact value. */ - sll X, (64-53), AT - sra AT, (64-53), AT - cmpeq X, AT, AT - beq AT, $x_big - - /* If we get here, we're expecting exact results from the division. - Do nothing else besides convert and clean up. */ - cvttq/c $f0, $f0 - excb - mt_fpcr $f10 - _FTOIT $f0, $0, 0 - -$egress: - mulq $0, Y, $1 - subq X, $1, $1 - - stq $0, 0($16) - stq $1, 8($16) - mov $16, $0 - -#if FRAME > 0 - lda sp, FRAME(sp) -#endif - ret - - .align 4 -$x_big: - /* If we get here, X is large enough that we don't expect exact - results, and neither X nor Y got mis-translated for the fp - division. Our task is to take the fp result, figure out how - far it's off from the correct result and compute a fixup. */ - -#define Q v0 /* quotient */ -#define R t0 /* remainder */ -#define SY t1 /* scaled Y */ -#define S t2 /* scalar */ -#define QY t3 /* Q*Y */ - - /* The fixup code below can only handle unsigned values. */ - or X, Y, AT - mov $31, t5 - blt AT, $fix_sign_in -$fix_sign_in_ret1: - cvttq/c $f0, $f0 - - _FTOIT $f0, Q, 8 -$fix_sign_in_ret2: - mulq Q, Y, QY - excb - mt_fpcr $f10 - - .align 4 - subq QY, X, R - mov Y, SY - mov 1, S - bgt R, $q_high - -$q_high_ret: - subq X, QY, R - mov Y, SY - mov 1, S - bgt R, $q_low - -$q_low_ret: - negq Q, t4 - cmovlbs t5, t4, Q - br $egress - - .align 4 - /* The quotient that we computed was too large. We need to reduce - it by S such that Y*S >= R. Obviously the closer we get to the - correct value the better, but overshooting high is ok, as we'll - fix that up later. */ -0: - addq SY, SY, SY - addq S, S, S -$q_high: - cmpult SY, R, AT - bne AT, 0b - - subq Q, S, Q - unop - subq QY, SY, QY - br $q_high_ret - - .align 4 - /* The quotient that we computed was too small. Divide Y by the - current remainder (R) and add that to the existing quotient (Q). - The expectation, of course, is that R is much smaller than X. */ - /* Begin with a shift-up loop. Compute S such that Y*S >= R. We - already have a copy of Y in SY and the value 1 in S. */ -0: - addq SY, SY, SY - addq S, S, S -$q_low: - cmpult SY, R, AT - bne AT, 0b - - /* Shift-down and subtract loop. Each iteration compares our scaled - Y (SY) with the remainder (R); if SY <= R then X is divisible by - Y's scalar (S) so add it to the quotient (Q). */ -2: addq Q, S, t3 - srl S, 1, S - cmpule SY, R, AT - subq R, SY, t4 - - cmovne AT, t3, Q - cmovne AT, t4, R - srl SY, 1, SY - bne S, 2b - - br $q_low_ret - - .align 4 -$fix_sign_in: - /* If we got here, then X|Y is negative. Need to adjust everything - such that we're doing unsigned division in the fixup loop. */ - /* T5 is true if result should be negative. */ - xor X, Y, AT - cmplt AT, 0, t5 - cmplt X, 0, AT - negq X, t0 - - cmovne AT, t0, X - cmplt Y, 0, AT - negq Y, t0 - - cmovne AT, t0, Y - blbc t5, $fix_sign_in_ret1 - - cvttq/c $f0, $f0 - _FTOIT $f0, Q, 8 - .align 3 - negq Q, Q - br $fix_sign_in_ret2 - -$divbyzero: - mov a0, v0 - lda a0, GEN_INTDIV - call_pal PAL_gentrap - stq zero, 0(v0) - stq zero, 8(v0) - -#if FRAME > 0 - lda sp, FRAME(sp) -#endif - ret - - .end ldiv - -weak_alias (ldiv, lldiv) diff --git a/sysdeps/alpha/libc-tls.c b/sysdeps/alpha/libc-tls.c deleted file mode 100644 index 7e02769171..0000000000 --- a/sysdeps/alpha/libc-tls.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. Alpha version. - Copyright (C) 2003, 2005, 2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <csu/libc-tls.c> -#include <dl-tls.h> - -/* On Alpha, linker optimizations are not required, so __tls_get_addr - can be called even in statically linked binaries. In this case module - must be always 1 and PT_TLS segment exist in the binary, otherwise it - would not link. */ - -void * -__tls_get_addr (tls_index *ti) -{ - dtv_t *dtv = THREAD_DTV (); - return (char *) dtv[1].pointer.val + ti->ti_offset; -} diff --git a/sysdeps/alpha/lldiv.S b/sysdeps/alpha/lldiv.S deleted file mode 100644 index 80c450a3fc..0000000000 --- a/sysdeps/alpha/lldiv.S +++ /dev/null @@ -1 +0,0 @@ -/* lldiv is the same as ldiv on the Alpha. */ diff --git a/sysdeps/alpha/lshift.s b/sysdeps/alpha/lshift.s deleted file mode 100644 index 42fb430dd4..0000000000 --- a/sysdeps/alpha/lshift.s +++ /dev/null @@ -1,109 +0,0 @@ - # Alpha 21064 __mpn_lshift -- - - # Copyright (C) 1994, 1995 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP 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 Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP 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. - - - # INPUT PARAMETERS - # res_ptr r16 - # s1_ptr r17 - # size r18 - # cnt r19 - - # This code runs at 4.8 cycles/limb on the 21064. With infinite unrolling, - # it would take 4 cycles/limb. It should be possible to get down to 3 - # cycles/limb since both ldq and stq can be paired with the other used - # instructions. But there are many restrictions in the 21064 pipeline that - # makes it hard, if not impossible, to get down to 3 cycles/limb: - - # 1. ldq has a 3 cycle delay, srl and sll have a 2 cycle delay. - # 2. Only aligned instruction pairs can be paired. - # 3. The store buffer or silo might not be able to deal with the bandwidth. - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_lshift - .ent __mpn_lshift -__mpn_lshift: - .frame $30,0,$26,0 - - s8addq $18,$17,$17 # make r17 point at end of s1 - ldq $4,-8($17) # load first limb - subq $17,8,$17 - subq $31,$19,$7 - s8addq $18,$16,$16 # make r16 point at end of RES - subq $18,1,$18 - and $18,4-1,$20 # number of limbs in first loop - srl $4,$7,$0 # compute function result - - beq $20,.L0 - subq $18,$20,$18 - - .align 3 -.Loop0: - ldq $3,-8($17) - subq $16,8,$16 - subq $17,8,$17 - subq $20,1,$20 - sll $4,$19,$5 - srl $3,$7,$6 - bis $3,$3,$4 - bis $5,$6,$8 - stq $8,0($16) - bne $20,.Loop0 - -.L0: beq $18,.Lend - - .align 3 -.Loop: ldq $3,-8($17) - subq $16,32,$16 - subq $18,4,$18 - sll $4,$19,$5 - srl $3,$7,$6 - - ldq $4,-16($17) - sll $3,$19,$1 - bis $5,$6,$8 - stq $8,24($16) - srl $4,$7,$2 - - ldq $3,-24($17) - sll $4,$19,$5 - bis $1,$2,$8 - stq $8,16($16) - srl $3,$7,$6 - - ldq $4,-32($17) - sll $3,$19,$1 - bis $5,$6,$8 - stq $8,8($16) - srl $4,$7,$2 - - subq $17,32,$17 - bis $1,$2,$8 - stq $8,0($16) - - bgt $18,.Loop - -.Lend: sll $4,$19,$8 - stq $8,-8($16) - ret $31,($26),1 - .end __mpn_lshift diff --git a/sysdeps/alpha/machine-gmon.h b/sysdeps/alpha/machine-gmon.h deleted file mode 100644 index 5f5522c0b4..0000000000 --- a/sysdeps/alpha/machine-gmon.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Machine-specific calling sequence for `mcount' profiling function. alpha - Copyright (C) 1995, 1996, 1997 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define _MCOUNT_DECL(from, self) \ - void __mcount (u_long from, u_long self) - -/* Call __mcount with our the return PC for our caller, and the return - PC our caller will return to. Empty since we use an assembly stub - instead. */ -#define MCOUNT diff --git a/sysdeps/alpha/memchr.S b/sysdeps/alpha/memchr.S deleted file mode 100644 index 5d713d53ba..0000000000 --- a/sysdeps/alpha/memchr.S +++ /dev/null @@ -1,176 +0,0 @@ -/* Copyright (C) 1996, 2000, 2003 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger (davidm@cs.arizona.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Finds characters in a memory area. Optimized for the Alpha: - - - memory accessed as aligned quadwords only - - uses cmpbge to compare 8 bytes in parallel - - does binary search to find 0 byte in last - quadword (HAKMEM needed 12 instructions to - do this instead of the 9 instructions that - binary search needs). - -For correctness consider that: - - - only minimum number of quadwords may be accessed - - the third argument is an unsigned long -*/ - -#include <sysdep.h> - - .set noreorder - .set noat - -ENTRY(__memchr) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - # Hack -- if someone passes in (size_t)-1, hoping to just - # search til the end of the address space, we will overflow - # below when we find the address of the last byte. Given - # that we will never have a 56-bit address space, cropping - # the length is the easiest way to avoid trouble. - zap a2, 0x80, t4 #-e0 : - - beq a2, $not_found # .. e1 : - ldq_u t0, 0(a0) # e1 : load first quadword - insbl a1, 1, t1 # .. e0 : t1 = 000000000000ch00 - and a1, 0xff, a1 #-e0 : a1 = 00000000000000ch - cmpult a2, 9, t3 # .. e1 : - or t1, a1, a1 # e0 : a1 = 000000000000chch - lda t2, -1(zero) # .. e1 : - sll a1, 16, t1 #-e0 : t1 = 00000000chch0000 - addq a0, t4, t4 # .. e1 : - or t1, a1, a1 # e1 : a1 = 00000000chchchch - unop # : - sll a1, 32, t1 #-e0 : t1 = chchchch00000000 - or t1, a1, a1 # e1 : a1 = chchchchchchchch - extql t0, a0, t6 # e0 : - beq t3, $first_quad # .. e1 : - - ldq_u t5, -1(t4) #-e1 : eight or less bytes to search - extqh t5, a0, t5 # .. e0 : - mov a0, v0 # e0 : - or t6, t5, t0 # .. e1 : t0 = quadword starting at a0 - - # Deal with the case where at most 8 bytes remain to be searched - # in t0. E.g.: - # a2 = 6 - # t0 = ????c6c5c4c3c2c1 -$last_quad: - negq a2, t5 #-e0 : - xor a1, t0, t0 # .. e1 : - srl t2, t5, t5 # e0 : t5 = mask of a2 bits set - cmpbge zero, t0, t1 # .. e1 : - and t1, t5, t1 #-e0 : - beq t1, $not_found # .. e1 : - -$found_it: - # Now, determine which byte matched: - negq t1, t2 # e0 : - and t1, t2, t1 # e1 : - - and t1, 0x0f, t0 #-e0 : - addq v0, 4, t2 # .. e1 : - cmoveq t0, t2, v0 # e0 : - - addq v0, 2, t2 # .. e1 : - and t1, 0x33, t0 #-e0 : - cmoveq t0, t2, v0 # .. e1 : - - and t1, 0x55, t0 # e0 : - addq v0, 1, t2 # .. e1 : - cmoveq t0, t2, v0 #-e0 : - -$done: ret # .. e1 : - - # Deal with the case where a2 > 8 bytes remain to be - # searched. a0 may not be aligned. - .align 4 -$first_quad: - andnot a0, 0x7, v0 #-e1 : - insqh t2, a0, t1 # .. e0 : t1 = 0000ffffffffffff (a0<0:2> ff) - xor t0, a1, t0 # e0 : - or t0, t1, t0 # e1 : t0 = ====ffffffffffff - cmpbge zero, t0, t1 #-e0 : - bne t1, $found_it # .. e1 : - - # At least one byte left to process. - - ldq t0, 8(v0) # e0 : - subq t4, 1, a2 # .. e1 : - addq v0, 8, v0 #-e0 : - - # Make a2 point to last quad to be accessed (the - # last quad may or may not be partial). - - andnot a2, 0x7, a2 # .. e1 : - cmpult v0, a2, t1 # e0 : - beq t1, $final # .. e1 : - - # At least two quads remain to be accessed. - - subq a2, v0, t3 #-e0 : t3 <- nr quads to be processed - and t3, 8, t3 # e1 : odd number of quads? - bne t3, $odd_quad_count # e1 : - - # At least three quads remain to be accessed - - mov t0, t3 # e0 : move prefetched value to correct reg - - .align 4 -$unrolled_loop: - ldq t0, 8(v0) #-e0 : prefetch t0 - xor a1, t3, t1 # .. e1 : - cmpbge zero, t1, t1 # e0 : - bne t1, $found_it # .. e1 : - - addq v0, 8, v0 #-e0 : -$odd_quad_count: - xor a1, t0, t1 # .. e1 : - ldq t3, 8(v0) # e0 : prefetch t3 - cmpbge zero, t1, t1 # .. e1 : - addq v0, 8, t5 #-e0 : - bne t1, $found_it # .. e1 : - - cmpult t5, a2, t5 # e0 : - addq v0, 8, v0 # .. e1 : - bne t5, $unrolled_loop #-e1 : - - mov t3, t0 # e0 : move prefetched value into t0 -$final: subq t4, v0, a2 # .. e1 : a2 <- number of bytes left to do - bne a2, $last_quad # e1 : - -$not_found: - mov zero, v0 #-e0 : - ret # .. e1 : - - END(__memchr) - -weak_alias (__memchr, memchr) -#if !__BOUNDED_POINTERS__ -weak_alias (__memchr, __ubp_memchr) -#endif -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/alpha/memset.S b/sysdeps/alpha/memset.S deleted file mode 100644 index e34af2b314..0000000000 --- a/sysdeps/alpha/memset.S +++ /dev/null @@ -1,137 +0,0 @@ -/* Copyright (C) 1996, 1997, 2003 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Fill a block of memory with a character. Optimized for the Alpha - architecture: - - - memory accessed as aligned quadwords only - - destination memory not read unless needed for good cache behaviour - - basic blocks arranged to optimize branch prediction for full-quadword - aligned memory blocks. - - partial head and tail quadwords constructed with byte-mask instructions - - This is generally scheduled for the EV5 (got to look out for my own - interests :-), but with EV4 needs in mind. There *should* be no more - stalls for the EV4 than there are for the EV5. -*/ - - -#include <sysdep.h> - - .set noat - .set noreorder - - .text - -/* There is a problem with either gdb (as of 4.16) or gas (as of 2.7) that - doesn't like putting the entry point for a procedure somewhere in the - middle of the procedure descriptor. Work around this by putting the main - loop in its own procedure descriptor. */ - - /* On entry to this basic block: - t3 == loop counter - t4 == bytes in partial final word - a0 == possibly misaligned destination pointer - a1 == replicated source character */ - - .ent memset_loop - .align 3 -memset_loop: - .frame sp, 0, ra, 0 - .prologue 0 - - beq t3, $tail - blbc t3, 0f # skip single store if count even - - stq_u a1, 0(a0) # e0 : store one word - subq t3, 1, t3 # .. e1 : - addq a0, 8, a0 # e0 : - beq t3, $tail # .. e1 : - -0: stq_u a1, 0(a0) # e0 : store two words - subq t3, 2, t3 # .. e1 : - stq_u a1, 8(a0) # e0 : - addq a0, 16, a0 # .. e1 : - bne t3, 0b # e1 : - -$tail: bne t4, 1f # is there a tail to do? - ret # no - - .align 3 -1: ldq_u t0, 0(a0) # e1 : yes, load original data - mskql a1, t4, t1 # .. e0 : - mskqh t0, t4, t0 # e0 : - or t0, t1, t0 # e1 (stall) - stq_u t0, 0(a0) # e0 : - ret # .. e1 : - - .end memset_loop - -ENTRY(memset) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - zapnot a1, 1, a1 # e0 : zero extend input character - mov a0, v0 # .. e1 : move return value in place - sll a1, 8, t0 # e0 : begin replicating the char - beq a2, $done # .. e1 : early exit for zero-length store - or t0, a1, a1 # e0 : - and a0, 7, t1 # .. e1 : dest misalignment - sll a1, 16, t0 # e0 : - addq a2, t1, a2 # .. e1 : add dest misalignment to count - or t0, a1, a1 # e0 : - srl a2, 3, t3 # .. e1 : loop = count >> 3 - sll a1, 32, t0 # e0 : - and a2, 7, t4 # .. e1 : find number of bytes in tail - or t0, a1, a1 # e0 : character replication done - - beq t1, memset_loop # .. e1 : aligned head, jump right in - - ldq_u t0, 0(a0) # e1 : load original data to mask into - mskqh a1, a0, t1 # .. e0 : - - cmpult a2, 8, t2 # e0 : is this a sub-word set? - bne t2, $oneq # .. e1 (zdb) - - mskql t0, a0, t0 # e0 : we span words. finish this partial - subq t3, 1, t3 # .. e1 : - addq a0, 8, a0 # e0 : - or t0, t1, t0 # .. e1 : - stq_u t0, -8(a0) # e0 : - br memset_loop # .. e1 : - - .align 3 -$oneq: - mskql t1, a2, t1 # e0 : entire operation within one word - mskql t0, a0, t2 # e0 : - mskqh t0, a2, t3 # e0 : - or t1, t2, t0 # .. e1 : - or t0, t3, t0 # e1 : - stq_u t0, 0(a0) # e0 (stall) - -$done: ret - - END(memset) -libc_hidden_builtin_def (memset) diff --git a/sysdeps/alpha/memusage.h b/sysdeps/alpha/memusage.h deleted file mode 100644 index 3d84160338..0000000000 --- a/sysdeps/alpha/memusage.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2000 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define GETSP() ({ register uintptr_t stack_ptr asm ("$30"); stack_ptr; }) - -#include <sysdeps/generic/memusage.h> diff --git a/sysdeps/alpha/mul_1.s b/sysdeps/alpha/mul_1.s deleted file mode 100644 index 165c281ac6..0000000000 --- a/sysdeps/alpha/mul_1.s +++ /dev/null @@ -1,85 +0,0 @@ - # Alpha 21064 __mpn_mul_1 -- Multiply a limb vector with a limb and store - # the result in a second limb vector. - - # Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP 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 Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP 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. - - - # INPUT PARAMETERS - # res_ptr r16 - # s1_ptr r17 - # size r18 - # s2_limb r19 - - # This code runs at 42 cycles/limb on the EV4 and 18 cycles/limb on the EV5. - - # To improve performance for long multiplications, we would use - # 'fetch' for S1 and 'fetch_m' for RES. It's not obvious how to use - # these instructions without slowing down the general code: 1. We can - # only have two prefetches in operation at any time in the Alpha - # architecture. 2. There will seldom be any special alignment - # between RES_PTR and S1_PTR. Maybe we can simply divide the current - # loop into an inner and outer loop, having the inner loop handle - # exactly one prefetch block? - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_mul_1 - .ent __mpn_mul_1 2 -__mpn_mul_1: - .frame $30,0,$26 - - ldq $2,0($17) # $2 = s1_limb - subq $18,1,$18 # size-- - mulq $2,$19,$3 # $3 = prod_low - bic $31,$31,$4 # clear cy_limb - umulh $2,$19,$0 # $0 = prod_high - beq $18,Lend1 # jump if size was == 1 - ldq $2,8($17) # $2 = s1_limb - subq $18,1,$18 # size-- - stq $3,0($16) - beq $18,Lend2 # jump if size was == 2 - - .align 3 -Loop: mulq $2,$19,$3 # $3 = prod_low - addq $4,$0,$0 # cy_limb = cy_limb + 'cy' - subq $18,1,$18 # size-- - umulh $2,$19,$4 # $4 = cy_limb - ldq $2,16($17) # $2 = s1_limb - addq $17,8,$17 # s1_ptr++ - addq $3,$0,$3 # $3 = cy_limb + prod_low - stq $3,8($16) - cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) - addq $16,8,$16 # res_ptr++ - bne $18,Loop - -Lend2: mulq $2,$19,$3 # $3 = prod_low - addq $4,$0,$0 # cy_limb = cy_limb + 'cy' - umulh $2,$19,$4 # $4 = cy_limb - addq $3,$0,$3 # $3 = cy_limb + prod_low - cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) - stq $3,8($16) - addq $4,$0,$0 # cy_limb = prod_high + cy - ret $31,($26),1 -Lend1: stq $3,0($16) - ret $31,($26),1 - - .end __mpn_mul_1 diff --git a/sysdeps/alpha/nscd-types.h b/sysdeps/alpha/nscd-types.h deleted file mode 100644 index 957edaf297..0000000000 --- a/sysdeps/alpha/nscd-types.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Types for the NSCD implementation. Alpha version. - Copyright (c) 2000 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdint.h> - -typedef int64_t nscd_ssize_t; diff --git a/sysdeps/alpha/rawmemchr.S b/sysdeps/alpha/rawmemchr.S deleted file mode 100644 index d3a69fa63c..0000000000 --- a/sysdeps/alpha/rawmemchr.S +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright (C) 2000, 2002 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Return pointer to first occurrence of CH in STR. */ - -#include <sysdep.h> - - .set noreorder - .set noat - -ENTRY(__rawmemchr) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - zapnot a1, 1, a1 # e0 : zero extend the search character - ldq_u t0, 0(a0) # .. e1 : load first quadword - sll a1, 8, t5 # e0 : replicate the search character - andnot a0, 7, v0 # .. e1 : align our loop pointer - - or t5, a1, a1 # e0 : - lda t4, -1 # .. e1 : build garbage mask - sll a1, 16, t5 # e0 : - unop # : - - mskqh t4, a0, t4 # e0 : - or t5, a1, a1 # .. e1 : - sll a1, 32, t5 # e0 : - cmpbge zero, t4, t4 # .. e1 : bits set iff byte is garbage - - or t5, a1, a1 # e0 : - xor t0, a1, t1 # .. e1 : make bytes == c zero - cmpbge zero, t1, t3 # e0 : bits set iff byte == c - unop # : - - andnot t3, t4, t0 # e0 : clear garbage bits - fnop # .. fa : - unop # : - bne t0, $found # .. e1 (zdb) - - .align 4 -$loop: - ldq t0, 8(v0) # e0 : - addq v0, 8, v0 # .. e1 : - nop # e0 : - xor t0, a1, t1 # .. e1 (ev5 data stall) - - cmpbge zero, t1, t0 # e0 : bits set iff byte == c - beq t0, $loop # .. e1 (zdb) - -$found: - negq t0, t1 # e0 : clear all but least set bit - and t0, t1, t0 # e1 (stall) - and t0, 0xf0, t2 # e0 : binary search for that set bit - and t0, 0xcc, t3 # .. e1 : - - and t0, 0xaa, t4 # e0 : - cmovne t2, 4, t2 # .. e1 : - cmovne t3, 2, t3 # e0 : - cmovne t4, 1, t4 # .. e1 : - - addq t2, t3, t2 # e0 : - addq v0, t4, v0 # .. e1 : - addq v0, t2, v0 # e0 : - ret # .. e1 : - - END(__rawmemchr) - -libc_hidden_def (__rawmemchr) -weak_alias (__rawmemchr, rawmemchr) diff --git a/sysdeps/alpha/reml.S b/sysdeps/alpha/reml.S deleted file mode 100644 index ae291b0505..0000000000 --- a/sysdeps/alpha/reml.S +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 2004 Free Software Foundation, Inc. - Contributed by Richard Henderson <rth@twiddle.net> - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "div_libc.h" - -/* 32-bit signed int remainder. This is not a normal C function. Argument - registers are t10 and t11, the result goes in t12. Only t12 and AT may - be clobbered. - - The FPU can handle the division for all input values except zero. - All we have to do is compute the remainder via multiply-and-subtract. - - The FPCR save/restore is due to the fact that the EV6 _will_ set FPCR_INE - for cvttq/c even without /sui being set. It will not, however, properly - raise the exception, so we don't have to worry about FPCR_INED being clear - and so dying by SIGFPE. */ - -#ifndef EXTEND -#define EXTEND(S,D) sextl S, D -#endif - - .text - .align 4 - .globl __reml - .type __reml, @funcnoplt - .usepv __reml, no - - cfi_startproc - cfi_return_column (RA) -__reml: - lda sp, -FRAME(sp) - cfi_def_cfa_offset (FRAME) - CALL_MCOUNT - stt $f0, 0(sp) - excb - beq Y, DIVBYZERO - - stt $f1, 8(sp) - stt $f2, 16(sp) - cfi_rel_offset ($f0, 0) - cfi_rel_offset ($f1, 8) - cfi_rel_offset ($f2, 16) - mf_fpcr $f2 - - EXTEND (X, RV) - EXTEND (Y, AT) - _ITOFT2 RV, $f0, 24, AT, $f1, 32 - cvtqt $f0, $f0 - cvtqt $f1, $f1 - divt/c $f0, $f1, $f0 - cvttq/c $f0, $f0 - excb - mt_fpcr $f2 - _FTOIT $f0, RV, 24 - - ldt $f0, 0(sp) - mull RV, Y, RV - ldt $f1, 8(sp) - ldt $f2, 16(sp) - lda sp, FRAME(sp) - cfi_restore ($f0) - cfi_restore ($f1) - cfi_restore ($f2) - cfi_def_cfa_offset (0) - subl X, RV, RV - ret $31, (RA), 1 - - cfi_endproc - .size __reml, .-__reml - - DO_DIVBYZERO diff --git a/sysdeps/alpha/remlu.S b/sysdeps/alpha/remlu.S deleted file mode 100644 index f8691e19a4..0000000000 --- a/sysdeps/alpha/remlu.S +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED -#define EXTEND(S,D) zapnot S, 15, D -#define __reml __remlu -#include <reml.S> diff --git a/sysdeps/alpha/remq.S b/sysdeps/alpha/remq.S deleted file mode 100644 index 64e958bb95..0000000000 --- a/sysdeps/alpha/remq.S +++ /dev/null @@ -1,269 +0,0 @@ -/* Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "div_libc.h" - - -/* 64-bit signed long remainder. These are not normal C functions. Argument - registers are t10 and t11, the result goes in t12. Only t12 and AT may - be clobbered. - - Theory of operation here is that we can use the FPU divider for virtually - all operands that we see: all dividend values between -2**53 and 2**53-1 - can be computed directly. Note that divisor values need not be checked - against that range because the rounded fp value will be close enough such - that the quotient is < 1, which will properly be truncated to zero when we - convert back to integer. - - When the dividend is outside the range for which we can compute exact - results, we use the fp quotent as an estimate from which we begin refining - an exact integral value. This reduces the number of iterations in the - shift-and-subtract loop significantly. - - The FPCR save/restore is due to the fact that the EV6 _will_ set FPCR_INE - for cvttq/c even without /sui being set. It will not, however, properly - raise the exception, so we don't have to worry about FPCR_INED being clear - and so dying by SIGFPE. */ - - .text - .align 4 - .globl __remq - .type __remq, @funcnoplt - .usepv __remq, no - - cfi_startproc - cfi_return_column (RA) -__remq: - lda sp, -FRAME(sp) - cfi_def_cfa_offset (FRAME) - CALL_MCOUNT - - /* Get the fp divide insn issued as quickly as possible. After - that's done, we have at least 22 cycles until its results are - ready -- all the time in the world to figure out how we're - going to use the results. */ - stt $f0, 0(sp) - excb - beq Y, DIVBYZERO - - stt $f1, 8(sp) - stt $f3, 48(sp) - cfi_rel_offset ($f0, 0) - cfi_rel_offset ($f1, 8) - cfi_rel_offset ($f3, 48) - mf_fpcr $f3 - - _ITOFT2 X, $f0, 16, Y, $f1, 24 - cvtqt $f0, $f0 - cvtqt $f1, $f1 - divt/c $f0, $f1, $f0 - - /* Check to see if X fit in the double as an exact value. */ - sll X, (64-53), AT - ldt $f1, 8(sp) - sra AT, (64-53), AT - cmpeq X, AT, AT - beq AT, $x_big - - /* If we get here, we're expecting exact results from the division. - Do nothing else besides convert, compute remainder, clean up. */ - cvttq/c $f0, $f0 - excb - mt_fpcr $f3 - _FTOIT $f0, AT, 16 - mulq AT, Y, AT - ldt $f0, 0(sp) - ldt $f3, 48(sp) - cfi_restore ($f1) - cfi_remember_state - cfi_restore ($f0) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - lda sp, FRAME(sp) - subq X, AT, RV - ret $31, (RA), 1 - - .align 4 - cfi_restore_state -$x_big: - /* If we get here, X is large enough that we don't expect exact - results, and neither X nor Y got mis-translated for the fp - division. Our task is to take the fp result, figure out how - far it's off from the correct result and compute a fixup. */ - stq t0, 16(sp) - stq t1, 24(sp) - stq t2, 32(sp) - stq t5, 40(sp) - cfi_rel_offset (t0, 16) - cfi_rel_offset (t1, 24) - cfi_rel_offset (t2, 32) - cfi_rel_offset (t5, 40) - -#define Q t0 /* quotient */ -#define R RV /* remainder */ -#define SY t1 /* scaled Y */ -#define S t2 /* scalar */ -#define QY t3 /* Q*Y */ - - /* The fixup code below can only handle unsigned values. */ - or X, Y, AT - mov $31, t5 - blt AT, $fix_sign_in -$fix_sign_in_ret1: - cvttq/c $f0, $f0 - - _FTOIT $f0, Q, 8 - .align 3 -$fix_sign_in_ret2: - ldt $f0, 0(sp) - stq t3, 0(sp) - cfi_restore ($f0) - cfi_rel_offset (t3, 0) - - mulq Q, Y, QY - excb - stq t4, 8(sp) - mt_fpcr $f3 - cfi_rel_offset (t4, 8) - - subq QY, X, R - mov Y, SY - mov 1, S - bgt R, $q_high - -$q_high_ret: - subq X, QY, R - mov Y, SY - mov 1, S - bgt R, $q_low - -$q_low_ret: - ldq t0, 16(sp) - ldq t1, 24(sp) - ldq t2, 32(sp) - bne t5, $fix_sign_out - -$fix_sign_out_ret: - ldq t3, 0(sp) - ldq t4, 8(sp) - ldq t5, 40(sp) - ldt $f3, 48(sp) - lda sp, FRAME(sp) - cfi_remember_state - cfi_restore (t0) - cfi_restore (t1) - cfi_restore (t2) - cfi_restore (t3) - cfi_restore (t4) - cfi_restore (t5) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - ret $31, (RA), 1 - - .align 4 - cfi_restore_state - /* The quotient that we computed was too large. We need to reduce - it by S such that Y*S >= R. Obviously the closer we get to the - correct value the better, but overshooting high is ok, as we'll - fix that up later. */ -0: - addq SY, SY, SY - addq S, S, S -$q_high: - cmpult SY, R, AT - bne AT, 0b - - subq Q, S, Q - unop - subq QY, SY, QY - br $q_high_ret - - .align 4 - /* The quotient that we computed was too small. Divide Y by the - current remainder (R) and add that to the existing quotient (Q). - The expectation, of course, is that R is much smaller than X. */ - /* Begin with a shift-up loop. Compute S such that Y*S >= R. We - already have a copy of Y in SY and the value 1 in S. */ -0: - addq SY, SY, SY - addq S, S, S -$q_low: - cmpult SY, R, AT - bne AT, 0b - - /* Shift-down and subtract loop. Each iteration compares our scaled - Y (SY) with the remainder (R); if SY <= R then X is divisible by - Y's scalar (S) so add it to the quotient (Q). */ -2: addq Q, S, t3 - srl S, 1, S - cmpule SY, R, AT - subq R, SY, t4 - - cmovne AT, t3, Q - cmovne AT, t4, R - srl SY, 1, SY - bne S, 2b - - br $q_low_ret - - .align 4 -$fix_sign_in: - /* If we got here, then X|Y is negative. Need to adjust everything - such that we're doing unsigned division in the fixup loop. */ - /* T5 records the changes we had to make: - bit 0: set if X was negated. Note that the sign of the - remainder follows the sign of the divisor. - bit 2: set if Y was negated. - */ - xor X, Y, t1 - cmplt X, 0, t5 - negq X, t0 - cmovne t5, t0, X - - cmplt Y, 0, AT - negq Y, t0 - s4addq AT, t5, t5 - cmovne AT, t0, Y - - bge t1, $fix_sign_in_ret1 - cvttq/c $f0, $f0 - _FTOIT $f0, Q, 8 - .align 3 - negq Q, Q - br $fix_sign_in_ret2 - - .align 4 -$fix_sign_out: - /* Now we get to undo what we did above. */ - /* ??? Is this really faster than just increasing the size of - the stack frame and storing X and Y in memory? */ - and t5, 4, AT - negq Y, t4 - cmovne AT, t4, Y - - negq X, t4 - cmovlbs t5, t4, X - negq RV, t4 - cmovlbs t5, t4, RV - - br $fix_sign_out_ret - - cfi_endproc - .size __remq, .-__remq - - DO_DIVBYZERO diff --git a/sysdeps/alpha/remqu.S b/sysdeps/alpha/remqu.S deleted file mode 100644 index 398a345a18..0000000000 --- a/sysdeps/alpha/remqu.S +++ /dev/null @@ -1,272 +0,0 @@ -/* Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "div_libc.h" - - -/* 64-bit unsigned long remainder. These are not normal C functions. Argument - registers are t10 and t11, the result goes in t12. Only t12 and AT may be - clobbered. - - Theory of operation here is that we can use the FPU divider for virtually - all operands that we see: all dividend values between -2**53 and 2**53-1 - can be computed directly. Note that divisor values need not be checked - against that range because the rounded fp value will be close enough such - that the quotient is < 1, which will properly be truncated to zero when we - convert back to integer. - - When the dividend is outside the range for which we can compute exact - results, we use the fp quotent as an estimate from which we begin refining - an exact integral value. This reduces the number of iterations in the - shift-and-subtract loop significantly. - - The FPCR save/restore is due to the fact that the EV6 _will_ set FPCR_INE - for cvttq/c even without /sui being set. It will not, however, properly - raise the exception, so we don't have to worry about FPCR_INED being clear - and so dying by SIGFPE. */ - - .text - .align 4 - .globl __remqu - .type __remqu, @funcnoplt - .usepv __remqu, no - - cfi_startproc - cfi_return_column (RA) -__remqu: - lda sp, -FRAME(sp) - cfi_def_cfa_offset (FRAME) - CALL_MCOUNT - - /* Get the fp divide insn issued as quickly as possible. After - that's done, we have at least 22 cycles until its results are - ready -- all the time in the world to figure out how we're - going to use the results. */ - subq Y, 1, AT - stt $f0, 0(sp) - and Y, AT, AT - - stt $f1, 8(sp) - excb - stt $f3, 48(sp) - beq AT, $powerof2 - cfi_rel_offset ($f0, 0) - cfi_rel_offset ($f1, 8) - cfi_rel_offset ($f3, 48) - - _ITOFT2 X, $f0, 16, Y, $f1, 24 - mf_fpcr $f3 - cvtqt $f0, $f0 - cvtqt $f1, $f1 - - blt X, $x_is_neg - divt/c $f0, $f1, $f0 - - /* Check to see if Y was mis-converted as signed value. */ - ldt $f1, 8(sp) - blt Y, $y_is_neg - - /* Check to see if X fit in the double as an exact value. */ - srl X, 53, AT - bne AT, $x_big - - /* If we get here, we're expecting exact results from the division. - Do nothing else besides convert, compute remainder, clean up. */ - cvttq/c $f0, $f0 - excb - mt_fpcr $f3 - _FTOIT $f0, AT, 16 - - mulq AT, Y, AT - ldt $f0, 0(sp) - ldt $f3, 48(sp) - lda sp, FRAME(sp) - cfi_remember_state - cfi_restore ($f0) - cfi_restore ($f1) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - - .align 4 - subq X, AT, RV - ret $31, (RA), 1 - - .align 4 - cfi_restore_state -$x_is_neg: - /* If we get here, X is so big that bit 63 is set, which made the - conversion come out negative. Fix it up lest we not even get - a good estimate. */ - ldah AT, 0x5f80 /* 2**64 as float. */ - stt $f2, 24(sp) - cfi_rel_offset ($f2, 24) - _ITOFS AT, $f2, 16 - - addt $f0, $f2, $f0 - divt/c $f0, $f1, $f0 - - /* Ok, we've now the divide issued. Continue with other checks. */ - .align 4 - ldt $f1, 8(sp) - unop - ldt $f2, 24(sp) - blt Y, $y_is_neg - cfi_restore ($f1) - cfi_restore ($f2) - cfi_remember_state /* for y_is_neg */ - - .align 4 -$x_big: - /* If we get here, X is large enough that we don't expect exact - results, and neither X nor Y got mis-translated for the fp - division. Our task is to take the fp result, figure out how - far it's off from the correct result and compute a fixup. */ - stq t0, 16(sp) - stq t1, 24(sp) - stq t2, 32(sp) - stq t3, 40(sp) - cfi_rel_offset (t0, 16) - cfi_rel_offset (t1, 24) - cfi_rel_offset (t2, 32) - cfi_rel_offset (t3, 40) - -#define Q t0 /* quotient */ -#define R RV /* remainder */ -#define SY t1 /* scaled Y */ -#define S t2 /* scalar */ -#define QY t3 /* Q*Y */ - - cvttq/c $f0, $f0 - _FTOIT $f0, Q, 8 - mulq Q, Y, QY - - .align 4 - stq t4, 8(sp) - excb - ldt $f0, 0(sp) - mt_fpcr $f3 - cfi_rel_offset (t4, 8) - cfi_restore ($f0) - - subq QY, X, R - mov Y, SY - mov 1, S - bgt R, $q_high - -$q_high_ret: - subq X, QY, R - mov Y, SY - mov 1, S - bgt R, $q_low - -$q_low_ret: - ldq t4, 8(sp) - ldq t0, 16(sp) - ldq t1, 24(sp) - ldq t2, 32(sp) - - ldq t3, 40(sp) - ldt $f3, 48(sp) - lda sp, FRAME(sp) - cfi_remember_state - cfi_restore (t0) - cfi_restore (t1) - cfi_restore (t2) - cfi_restore (t3) - cfi_restore (t4) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - ret $31, (RA), 1 - - .align 4 - cfi_restore_state - /* The quotient that we computed was too large. We need to reduce - it by S such that Y*S >= R. Obviously the closer we get to the - correct value the better, but overshooting high is ok, as we'll - fix that up later. */ -0: - addq SY, SY, SY - addq S, S, S -$q_high: - cmpult SY, R, AT - bne AT, 0b - - subq Q, S, Q - unop - subq QY, SY, QY - br $q_high_ret - - .align 4 - /* The quotient that we computed was too small. Divide Y by the - current remainder (R) and add that to the existing quotient (Q). - The expectation, of course, is that R is much smaller than X. */ - /* Begin with a shift-up loop. Compute S such that Y*S >= R. We - already have a copy of Y in SY and the value 1 in S. */ -0: - addq SY, SY, SY - addq S, S, S -$q_low: - cmpult SY, R, AT - bne AT, 0b - - /* Shift-down and subtract loop. Each iteration compares our scaled - Y (SY) with the remainder (R); if SY <= R then X is divisible by - Y's scalar (S) so add it to the quotient (Q). */ -2: addq Q, S, t3 - srl S, 1, S - cmpule SY, R, AT - subq R, SY, t4 - - cmovne AT, t3, Q - cmovne AT, t4, R - srl SY, 1, SY - bne S, 2b - - br $q_low_ret - - .align 4 - cfi_restore_state -$y_is_neg: - /* If we get here, Y is so big that bit 63 is set. The results - from the divide will be completely wrong. Fortunately, the - quotient must be either 0 or 1, so the remainder must be X - or X-Y, so just compute it directly. */ - cmpule Y, X, AT - subq X, Y, RV - ldt $f0, 0(sp) - cmoveq AT, X, RV - - lda sp, FRAME(sp) - cfi_restore ($f0) - cfi_def_cfa_offset (0) - ret $31, (RA), 1 - - .align 4 - cfi_def_cfa_offset (FRAME) -$powerof2: - subq Y, 1, AT - beq Y, DIVBYZERO - and X, AT, RV - lda sp, FRAME(sp) - cfi_def_cfa_offset (0) - ret $31, (RA), 1 - - cfi_endproc - .size __remqu, .-__remqu - - DO_DIVBYZERO diff --git a/sysdeps/alpha/rshift.s b/sysdeps/alpha/rshift.s deleted file mode 100644 index 7c230f1933..0000000000 --- a/sysdeps/alpha/rshift.s +++ /dev/null @@ -1,107 +0,0 @@ - # Alpha 21064 __mpn_rshift -- - - # Copyright (C) 1994, 1995 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP 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 Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP 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. - - - # INPUT PARAMETERS - # res_ptr r16 - # s1_ptr r17 - # size r18 - # cnt r19 - - # This code runs at 4.8 cycles/limb on the 21064. With infinite unrolling, - # it would take 4 cycles/limb. It should be possible to get down to 3 - # cycles/limb since both ldq and stq can be paired with the other used - # instructions. But there are many restrictions in the 21064 pipeline that - # makes it hard, if not impossible, to get down to 3 cycles/limb: - - # 1. ldq has a 3 cycle delay, srl and sll have a 2 cycle delay. - # 2. Only aligned instruction pairs can be paired. - # 3. The store buffer or silo might not be able to deal with the bandwidth. - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_rshift - .ent __mpn_rshift -__mpn_rshift: - .frame $30,0,$26,0 - - ldq $4,0($17) # load first limb - addq $17,8,$17 - subq $31,$19,$7 - subq $18,1,$18 - and $18,4-1,$20 # number of limbs in first loop - sll $4,$7,$0 # compute function result - - beq $20,.L0 - subq $18,$20,$18 - - .align 3 -.Loop0: - ldq $3,0($17) - addq $16,8,$16 - addq $17,8,$17 - subq $20,1,$20 - srl $4,$19,$5 - sll $3,$7,$6 - bis $3,$3,$4 - bis $5,$6,$8 - stq $8,-8($16) - bne $20,.Loop0 - -.L0: beq $18,.Lend - - .align 3 -.Loop: ldq $3,0($17) - addq $16,32,$16 - subq $18,4,$18 - srl $4,$19,$5 - sll $3,$7,$6 - - ldq $4,8($17) - srl $3,$19,$1 - bis $5,$6,$8 - stq $8,-32($16) - sll $4,$7,$2 - - ldq $3,16($17) - srl $4,$19,$5 - bis $1,$2,$8 - stq $8,-24($16) - sll $3,$7,$6 - - ldq $4,24($17) - srl $3,$19,$1 - bis $5,$6,$8 - stq $8,-16($16) - sll $4,$7,$2 - - addq $17,32,$17 - bis $1,$2,$8 - stq $8,-8($16) - - bgt $18,.Loop - -.Lend: srl $4,$19,$8 - stq $8,0($16) - ret $31,($26),1 - .end __mpn_rshift diff --git a/sysdeps/alpha/setjmp.S b/sysdeps/alpha/setjmp.S deleted file mode 100644 index bc5da0f5bc..0000000000 --- a/sysdeps/alpha/setjmp.S +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright (C) 1992,1994,1996,1997,2002,2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __ASSEMBLY__ - -#include <sysdep.h> -#include <jmpbuf-offsets.h> - - .ent __sigsetjmp - .global __sigsetjmp -__sigsetjmp: - ldgp gp, 0(pv) - -$sigsetjmp_local: -#ifndef PIC -#define FRAME 16 - subq sp, FRAME, sp - .frame sp, FRAME, ra, 0 - stq ra, 0(sp) - .mask 0x04000000, -FRAME -#else -#define FRAME 0 - .frame sp, FRAME, ra, 0 -#endif -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - stq s0, JB_S0*8(a0) - stq s1, JB_S1*8(a0) - stq s2, JB_S2*8(a0) - stq s3, JB_S3*8(a0) - stq s4, JB_S4*8(a0) - stq s5, JB_S5*8(a0) -#ifdef PTR_MANGLE - PTR_MANGLE(t1, ra, t0) - stq t1, JB_PC*8(a0) -#else - stq ra, JB_PC*8(a0) -#endif -#if defined(PTR_MANGLE) && FRAME == 0 - PTR_MANGLE2(t1, sp, t0) -#else - addq sp, FRAME, t1 -# ifdef PTR_MANGLE - PTR_MANGLE2(t1, t1, t0) -# endif -#endif - stq t1, JB_SP*8(a0) -#ifdef PTR_MANGLE - PTR_MANGLE2(t1, fp, t0) - stq t1, JB_FP*8(a0) -#else - stq fp, JB_FP*8(a0) -#endif - stt $f2, JB_F2*8(a0) - stt $f3, JB_F3*8(a0) - stt $f4, JB_F4*8(a0) - stt $f5, JB_F5*8(a0) - stt $f6, JB_F6*8(a0) - stt $f7, JB_F7*8(a0) - stt $f8, JB_F8*8(a0) - stt $f9, JB_F9*8(a0) - -#ifndef PIC - /* Call to C to (potentially) save our signal mask. */ - jsr ra, __sigjmp_save - ldq ra, 0(sp) - addq sp, 16, sp - ret -#elif defined NOT_IN_libc && defined IS_IN_rtld - /* In ld.so we never save the signal mask. */ - mov 0, v0 - ret -#else - /* Tailcall to save the signal mask. */ - br $31, __sigjmp_save !samegp -#endif - -END(__sigsetjmp) - -/* Put these traditional entry points in the same file so that we can - elide much of the nonsense in trying to jmp to the real function. */ - -ENTRY(_setjmp) - ldgp gp, 0(pv) - .prologue 1 - mov 0, a1 - br $sigsetjmp_local -END(_setjmp) -libc_hidden_def (_setjmp) - -ENTRY(setjmp) - ldgp gp, 0(pv) - .prologue 1 - mov 1, a1 - br $sigsetjmp_local -END(setjmp) - -weak_extern(_setjmp) -weak_extern(setjmp) diff --git a/sysdeps/alpha/soft-fp/Makefile b/sysdeps/alpha/soft-fp/Makefile deleted file mode 100644 index 5410a78984..0000000000 --- a/sysdeps/alpha/soft-fp/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -# Software floating-point emulation. - -ifeq ($(subdir),soft-fp) -sysdep_routines += ots_add ots_sub ots_mul ots_div ots_cmp ots_cmpe \ - ots_cvtxq ots_cvtqx ots_cvtqux ots_cvttx ots_cvtxt ots_nintxq -endif - -ifeq ($(subdir),math) -CPPFLAGS += -I../soft-fp -endif diff --git a/sysdeps/alpha/soft-fp/Versions b/sysdeps/alpha/soft-fp/Versions deleted file mode 100644 index 3901287115..0000000000 --- a/sysdeps/alpha/soft-fp/Versions +++ /dev/null @@ -1,8 +0,0 @@ -libc { - GLIBC_2.3.4 { - _OtsAddX; _OtsSubX; _OtsMulX; _OtsDivX; - _OtsEqlX; _OtsNeqX; _OtsLssX; _OtsLeqX; _OtsGtrX; _OtsGeqX; - _OtsCvtQX; _OtsCvtQUX; _OtsCvtXQ; _OtsNintXQ; - _OtsConvertFloatTX; _OtsConvertFloatXT; - } -} diff --git a/sysdeps/alpha/soft-fp/e_sqrtl.c b/sysdeps/alpha/soft-fp/e_sqrtl.c deleted file mode 100644 index 717d170127..0000000000 --- a/sysdeps/alpha/soft-fp/e_sqrtl.c +++ /dev/null @@ -1,40 +0,0 @@ -/* long double square root in software floating-point emulation. - Copyright (C) 1997, 1999, 2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdlib.h> -#include <soft-fp.h> -#include <quad.h> - -long double -__ieee754_sqrtl (const long double a) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(C); - long double c; - long _round = 4; /* dynamic rounding */ - - FP_INIT_ROUNDMODE; - FP_UNPACK_Q(A, a); - FP_SQRT_Q(C, A); - FP_PACK_Q(c, C); - FP_HANDLE_EXCEPTIONS; - return c; -} diff --git a/sysdeps/alpha/soft-fp/local-soft-fp.h b/sysdeps/alpha/soft-fp/local-soft-fp.h deleted file mode 100644 index e93a2ad064..0000000000 --- a/sysdeps/alpha/soft-fp/local-soft-fp.h +++ /dev/null @@ -1,44 +0,0 @@ -#include <stdlib.h> -#include <soft-fp.h> -#include <quad.h> - -/* Helpers for the Ots functions which receive long double arguments - in two integer registers, and return values in $16+$17. */ - -#undef _FP_UNPACK_RAW_2 -#define _FP_UNPACK_RAW_2(fs, X, val) \ - do { \ - union _FP_UNION_##fs _flo; \ - _flo.longs.a = val##l; \ - _flo.longs.b = val##h; \ - X##_f0 = _flo.bits.frac0; \ - X##_f1 = _flo.bits.frac1; \ - X##_e = _flo.bits.exp; \ - X##_s = _flo.bits.sign; \ - } while (0) - -#undef _FP_PACK_RAW_2 -#define _FP_PACK_RAW_2(fs, val, X) \ - do { \ - union _FP_UNION_##fs _flo; \ - _flo.bits.frac0 = X##_f0; \ - _flo.bits.frac1 = X##_f1; \ - _flo.bits.exp = X##_e; \ - _flo.bits.sign = X##_s; \ - val##l = _flo.longs.a; \ - val##h = _flo.longs.b; \ - } while (0) - -#define FP_DECL_RETURN(X) \ - long X##l, X##h - -/* ??? We don't have a real way to tell the compiler that we're wanting - to return values in $16+$17. Instead use a volatile asm to make sure - that the values are live, and just hope that nothing kills the values - in between here and the end of the function. */ -#define FP_RETURN(X) \ -do { \ - register long r16 __asm__("16") = X##l; \ - register long r17 __asm__("17") = X##h; \ - asm volatile ("" : : "r"(r16), "r"(r17)); \ -} while (0) diff --git a/sysdeps/alpha/soft-fp/ots_add.c b/sysdeps/alpha/soft-fp/ots_add.c deleted file mode 100644 index acf66f316b..0000000000 --- a/sysdeps/alpha/soft-fp/ots_add.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Software floating-point emulation: addition. - Copyright (C) 1997,1999,2004,2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "local-soft-fp.h" - -void -_OtsAddX(long al, long ah, long bl, long bh, long _round) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - FP_DECL_RETURN(c); - - FP_INIT_ROUNDMODE; - FP_UNPACK_SEMIRAW_Q(A, a); - FP_UNPACK_SEMIRAW_Q(B, b); - FP_ADD_Q(C, A, B); - FP_PACK_SEMIRAW_Q(c, C); - FP_HANDLE_EXCEPTIONS; - - FP_RETURN(c); -} diff --git a/sysdeps/alpha/soft-fp/ots_cmp.c b/sysdeps/alpha/soft-fp/ots_cmp.c deleted file mode 100644 index c356b4848e..0000000000 --- a/sysdeps/alpha/soft-fp/ots_cmp.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Software floating-point emulation: comparison. - Copyright (C) 1997,1999,2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "local-soft-fp.h" - -static long -internal_equality (long al, long ah, long bl, long bh, long neq) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - long r; - - FP_UNPACK_RAW_Q(A, a); - FP_UNPACK_RAW_Q(B, b); - - if ((A_e == _FP_EXPMAX_Q && !_FP_FRAC_ZEROP_2(A)) - || (B_e == _FP_EXPMAX_Q && !_FP_FRAC_ZEROP_2(B))) - { - /* EQ and NE signal invalid operation only if either operand is SNaN. */ - if (FP_ISSIGNAN_Q(A) || FP_ISSIGNAN_Q(B)) - { - FP_SET_EXCEPTION(FP_EX_INVALID); - FP_HANDLE_EXCEPTIONS; - } - return -1; - } - - r = (A_e == B_e - && _FP_FRAC_EQ_2 (A, B) - && (A_s == B_s || (!A_e && _FP_FRAC_ZEROP_2(A)))); - r ^= neq; - - return r; -} - -long -_OtsEqlX (long al, long ah, long bl, long bh) -{ - return internal_equality (al, ah, bl, bh, 0); -} - -long -_OtsNeqX (long al, long ah, long bl, long bh) -{ - return internal_equality (al, ah, bl, bh, 1); -} diff --git a/sysdeps/alpha/soft-fp/ots_cmpe.c b/sysdeps/alpha/soft-fp/ots_cmpe.c deleted file mode 100644 index 001eb75a9b..0000000000 --- a/sysdeps/alpha/soft-fp/ots_cmpe.c +++ /dev/null @@ -1,83 +0,0 @@ -/* Software floating-point emulation: comparison. - Copyright (C) 1997,1999,2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "local-soft-fp.h" - -static long -internal_compare (long al, long ah, long bl, long bh) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - long r; - - FP_UNPACK_RAW_Q(A, a); - FP_UNPACK_RAW_Q(B, b); - FP_CMP_Q (r, A, B, 2); - - /* Relative comparisons signal invalid operation if either operand is NaN. */ - if (r == 2) - { - FP_SET_EXCEPTION(FP_EX_INVALID); - FP_HANDLE_EXCEPTIONS; - } - - return r; -} - -long -_OtsLssX (long al, long ah, long bl, long bh) -{ - long r = internal_compare (al, ah, bl, bh); - if (r == 2) - return -1; - else - return r < 0; -} - -long -_OtsLeqX (long al, long ah, long bl, long bh) -{ - long r = internal_compare (al, ah, bl, bh); - if (r == 2) - return -1; - else - return r <= 0; -} - -long -_OtsGtrX (long al, long ah, long bl, long bh) -{ - long r = internal_compare (al, ah, bl, bh); - if (r == 2) - return -1; - else - return r > 0; -} - -long -_OtsGeqX (long al, long ah, long bl, long bh) -{ - long r = internal_compare (al, ah, bl, bh); - if (r == 2) - return -1; - else - return r >= 0; -} diff --git a/sysdeps/alpha/soft-fp/ots_cvtqux.c b/sysdeps/alpha/soft-fp/ots_cvtqux.c deleted file mode 100644 index 82c50806c4..0000000000 --- a/sysdeps/alpha/soft-fp/ots_cvtqux.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Software floating-point emulation: unsigned integer to float conversion. - Copyright (C) 1997,1999,2004,2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "local-soft-fp.h" - -/* Should never actually be used, since we've more bits of precision - than the incomming long, but needed for linkage. */ -#undef FP_ROUNDMODE -#define FP_ROUNDMODE FP_RND_ZERO - -void -_OtsCvtQUX (unsigned long a) -{ - FP_DECL_EX; - FP_DECL_Q(C); - FP_DECL_RETURN(c); - - FP_FROM_INT_Q(C, a, 64, unsigned long); - FP_PACK_RAW_Q(c, C); - - FP_RETURN(c); -} diff --git a/sysdeps/alpha/soft-fp/ots_cvtqx.c b/sysdeps/alpha/soft-fp/ots_cvtqx.c deleted file mode 100644 index dc80291506..0000000000 --- a/sysdeps/alpha/soft-fp/ots_cvtqx.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Software floating-point emulation: signed integer to float conversion. - Copyright (C) 1997,1999,2004,2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "local-soft-fp.h" - -/* Should never actually be used, since we've more bits of precision - than the incomming long, but needed for linkage. */ -#undef FP_ROUNDMODE -#define FP_ROUNDMODE FP_RND_ZERO - -void -_OtsCvtQX (long a) -{ - FP_DECL_EX; - FP_DECL_Q(C); - FP_DECL_RETURN(c); - - FP_FROM_INT_Q(C, a, 64, unsigned long); - FP_PACK_RAW_Q(c, C); - FP_RETURN(c); -} diff --git a/sysdeps/alpha/soft-fp/ots_cvttx.c b/sysdeps/alpha/soft-fp/ots_cvttx.c deleted file mode 100644 index 2d0bc9bca9..0000000000 --- a/sysdeps/alpha/soft-fp/ots_cvttx.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Software floating-point emulation: floating point extension. - Copyright (C) 1997,1999,2004,2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "local-soft-fp.h" -#include "double.h" - -/* Should never actually be used, since we're extending, but needed - for linkage. */ -#undef FP_ROUNDMODE -#define FP_ROUNDMODE FP_RND_ZERO - -void -_OtsConvertFloatTX(double a) -{ - FP_DECL_EX; - FP_DECL_D(A); - FP_DECL_Q(C); - FP_DECL_RETURN(c); - - FP_UNPACK_RAW_D(A, a); -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - FP_EXTEND(Q,D,4,2,C,A); -#else - FP_EXTEND(Q,D,2,1,C,A); -#endif - FP_PACK_RAW_Q(c, C); - FP_HANDLE_EXCEPTIONS; - - FP_RETURN(c); -} diff --git a/sysdeps/alpha/soft-fp/ots_cvtxq.c b/sysdeps/alpha/soft-fp/ots_cvtxq.c deleted file mode 100644 index 2c9df529d5..0000000000 --- a/sysdeps/alpha/soft-fp/ots_cvtxq.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Software floating-point emulation: float to integer conversion. - Copyright (C) 1997,1999,2004,2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "local-soft-fp.h" - -long -_OtsCvtXQ (long al, long ah, long _round) -{ - FP_DECL_EX; - FP_DECL_Q(A); - unsigned long r; - long s; - - /* If bit 3 is set, then integer overflow detection is requested. */ - s = _round & 8 ? 1 : -1; - _round = _round & 3; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_Q(A, a); - FP_TO_INT_Q(r, A, 64, s); - - if (s > 0 && (_fex &= FP_EX_INVALID)) - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/alpha/soft-fp/ots_cvtxt.c b/sysdeps/alpha/soft-fp/ots_cvtxt.c deleted file mode 100644 index 6221a2365c..0000000000 --- a/sysdeps/alpha/soft-fp/ots_cvtxt.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Software floating-point emulation: floating point truncation. - Copyright (C) 1997,1999,2004,2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "local-soft-fp.h" -#include "double.h" - -double -_OtsConvertFloatXT (long al, long ah, long _round) -{ - FP_DECL_EX; - FP_DECL_Q(A); - FP_DECL_D(R); - double r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_SEMIRAW_Q(A, a); -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - FP_TRUNC(D,Q,2,4,R,A); -#else - FP_TRUNC(D,Q,1,2,R,A); -#endif - FP_PACK_SEMIRAW_D(r, R); - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/alpha/soft-fp/ots_div.c b/sysdeps/alpha/soft-fp/ots_div.c deleted file mode 100644 index eb07489284..0000000000 --- a/sysdeps/alpha/soft-fp/ots_div.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Software floating-point emulation: division. - Copyright (C) 1997,1999,2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "local-soft-fp.h" - -void -_OtsDivX(long al, long ah, long bl, long bh, long _round) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - FP_DECL_RETURN(c); - - FP_INIT_ROUNDMODE; - FP_UNPACK_Q(A, a); - FP_UNPACK_Q(B, b); - FP_DIV_Q(C, A, B); - FP_PACK_Q(c, C); - FP_HANDLE_EXCEPTIONS; - - FP_RETURN(c); -} diff --git a/sysdeps/alpha/soft-fp/ots_mul.c b/sysdeps/alpha/soft-fp/ots_mul.c deleted file mode 100644 index f88ee33fbc..0000000000 --- a/sysdeps/alpha/soft-fp/ots_mul.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Software floating-point emulation: multiplication. - Copyright (C) 1997,1999,2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "local-soft-fp.h" - -void -_OtsMulX(long al, long ah, long bl, long bh, long _round) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - FP_DECL_RETURN(c); - - FP_INIT_ROUNDMODE; - FP_UNPACK_Q(A, a); - FP_UNPACK_Q(B, b); - FP_MUL_Q(C, A, B); - FP_PACK_Q(c, C); - FP_HANDLE_EXCEPTIONS; - - FP_RETURN(c); -} diff --git a/sysdeps/alpha/soft-fp/ots_nintxq.c b/sysdeps/alpha/soft-fp/ots_nintxq.c deleted file mode 100644 index a718372af7..0000000000 --- a/sysdeps/alpha/soft-fp/ots_nintxq.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Software floating-point emulation: convert to fortran nearest. - Copyright (C) 1997,1999,2004,2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "local-soft-fp.h" - -long -_OtsNintXQ (long al, long ah, long _round) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - unsigned long r; - long s; - - /* If bit 3 is set, then integer overflow detection is requested. */ - s = _round & 8 ? 1 : -1; - _round = _round & 3; - - FP_INIT_ROUNDMODE; - FP_UNPACK_SEMIRAW_Q(A, a); - - /* Build 0.5 * sign(A) */ - B_e = _FP_EXPBIAS_Q; - __FP_FRAC_SET_2 (B, 0, 0); - B_s = A_s; - - FP_ADD_Q(C, A, B); - _FP_FRAC_SRL_2(C, _FP_WORKBITS); - _FP_FRAC_HIGH_RAW_Q(C) &= ~(_FP_W_TYPE)_FP_IMPLBIT_Q; - FP_TO_INT_Q(r, C, 64, s); - if (s > 0 && (_fex &= FP_EX_INVALID)) - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/alpha/soft-fp/ots_sub.c b/sysdeps/alpha/soft-fp/ots_sub.c deleted file mode 100644 index 5147266a04..0000000000 --- a/sysdeps/alpha/soft-fp/ots_sub.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Software floating-point emulation: subtraction. - Copyright (C) 1997,1999,2004,2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "local-soft-fp.h" - -void -_OtsSubX(long al, long ah, long bl, long bh, long _round) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - FP_DECL_RETURN(c); - - FP_INIT_ROUNDMODE; - FP_UNPACK_SEMIRAW_Q(A, a); - FP_UNPACK_SEMIRAW_Q(B, b); - FP_SUB_Q(C, A, B); - FP_PACK_SEMIRAW_Q(c, C); - FP_HANDLE_EXCEPTIONS; - - FP_RETURN(c); -} diff --git a/sysdeps/alpha/soft-fp/sfp-machine.h b/sysdeps/alpha/soft-fp/sfp-machine.h deleted file mode 100644 index 2bad4e9dc6..0000000000 --- a/sysdeps/alpha/soft-fp/sfp-machine.h +++ /dev/null @@ -1,94 +0,0 @@ -/* Machine-dependent software floating-point definitions. - Alpha userland IEEE 128-bit version. - Copyright (C) 2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com), - Jakub Jelinek (jj@ultra.linux.cz) and - David S. Miller (davem@redhat.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fenv_libc.h> - -#define _FP_W_TYPE_SIZE 64 -#define _FP_W_TYPE unsigned long -#define _FP_WS_TYPE signed long -#define _FP_I_TYPE long - -#define _FP_MUL_MEAT_S(R,X,Y) \ - _FP_MUL_MEAT_1_imm(_FP_WFRACBITS_S,R,X,Y) -#define _FP_MUL_MEAT_D(R,X,Y) \ - _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_Q(R,X,Y) \ - _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_imm(S,R,X,Y,_FP_DIV_HELP_imm) -#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y) -#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y) - -#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) -#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1) -#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1 -#define _FP_NANSIGN_S 0 -#define _FP_NANSIGN_D 0 -#define _FP_NANSIGN_Q 0 - -#define _FP_KEEPNANFRACP 1 - -/* Alpha Architecture Handbook, 4.7.10.4 sez that we should prefer any - type of NaN in Fb, then Fa. */ -#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do { \ - R##_s = Y##_s; \ - _FP_FRAC_COPY_##wc(R,X); \ - R##_c = FP_CLS_NAN; \ - } while (0) - -/* Rounding mode settings. */ -#define FP_RND_NEAREST FE_TONEAREST -#define FP_RND_ZERO FE_TOWARDZERO -#define FP_RND_PINF FE_UPWARD -#define FP_RND_MINF FE_DOWNWARD - -/* Obtain the current rounding mode. It's given as an argument to - all the Ots functions, with 4 meaning "dynamic". */ -#define FP_ROUNDMODE _round - -/* Exception flags. */ -#define FP_EX_INVALID FE_INVALID -#define FP_EX_OVERFLOW FE_OVERFLOW -#define FP_EX_UNDERFLOW FE_UNDERFLOW -#define FP_EX_DIVZERO FE_DIVBYZERO -#define FP_EX_INEXACT FE_INEXACT - -#define FP_INIT_ROUNDMODE \ -do { \ - if (__builtin_expect (_round == 4, 0)) \ - { \ - unsigned long t; \ - __asm__ __volatile__("excb; mf_fpcr %0" : "=f"(t)); \ - _round = (t >> FPCR_ROUND_SHIFT) & 3; \ - } \ -} while (0) - -#define FP_HANDLE_EXCEPTIONS \ -do { \ - if (__builtin_expect (_fex, 0)) \ - { \ - unsigned long t = __ieee_get_fp_control (); \ - __ieee_set_fp_control (t | _fex); \ - } \ -} while (0) diff --git a/sysdeps/alpha/stackinfo.h b/sysdeps/alpha/stackinfo.h deleted file mode 100644 index 0a281bd435..0000000000 --- a/sysdeps/alpha/stackinfo.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2001 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -/* On Alpha the stack grows down. */ -#define _STACK_GROWS_DOWN 1 - -#endif /* stackinfo.h */ diff --git a/sysdeps/alpha/stpcpy.S b/sysdeps/alpha/stpcpy.S deleted file mode 100644 index b73e85f217..0000000000 --- a/sysdeps/alpha/stpcpy.S +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 1996, 2002, 2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>, 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Copy a null-terminated string from SRC to DST. Return a pointer - to the null-terminator in the source. */ - -#include <sysdep.h> - - .text - -ENTRY(__stpcpy) - ldgp gp, 0(pv) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - jsr t9, __stxcpy # do the work of the copy - - and t8, 0xf0, t2 # binary search for byte offset of the - and t8, 0xcc, t1 # last byte written. - and t8, 0xaa, t0 - andnot a0, 7, a0 - cmovne t2, 4, t2 - cmovne t1, 2, t1 - cmovne t0, 1, t0 - addq a0, t2, v0 - addq t0, t1, t0 - addq v0, t0, v0 - - ret - - END(__stpcpy) - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) diff --git a/sysdeps/alpha/stpncpy.S b/sysdeps/alpha/stpncpy.S deleted file mode 100644 index e877cf176a..0000000000 --- a/sysdeps/alpha/stpncpy.S +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (C) 1996, 2002 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@tamu.edu) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Copy no more than COUNT bytes of the null-terminated string from - SRC to DST. If SRC does not cover all of COUNT, the balance is - zeroed. Return the address of the terminating null in DEST, if - any, else DEST + COUNT. */ - -#include <sysdep.h> - - .set noat - .set noreorder - - .text - -ENTRY(__stpncpy) - ldgp gp, 0(pv) -#ifdef PROF - lda AT, _mcount - jsr AT, (AT), _mcount -#endif - .prologue 1 - - beq a2, $zerocount - jsr t9, __stxncpy # do the work of the copy - - and t8, 0xf0, t3 # binary search for byte offset of the - and t8, 0xcc, t2 # last byte written. - and t8, 0xaa, t1 - andnot a0, 7, v0 - cmovne t3, 4, t3 - cmovne t2, 2, t2 - cmovne t1, 1, t1 - addq v0, t3, v0 - addq t1, t2, t1 - addq v0, t1, v0 - - bne a2, $multiword # do we have full words left? - - .align 3 - zapnot t0, t8, t4 # e0 : was last byte a null? - subq t8, 1, t2 # .. e1 : - addq v0, 1, t5 # e0 : - subq t10, 1, t3 # .. e1 : - or t2, t8, t2 # e0 : clear the bits between the last - or t3, t10, t3 # .. e1 : written byte and the last byte in - andnot t3, t2, t3 # e0 : COUNT - cmovne t4, t5, v0 # .. e1 : if last written wasnt null, inc v0 - zap t0, t3, t0 # e0 : - stq_u t0, 0(a0) # e1 : - ret # .. e1 : - - .align 3 -$multiword: - subq t8, 1, t7 # e0 : clear the final bits in the prev - or t7, t8, t7 # e1 : word - zapnot t0, t7, t0 # e0 : - subq a2, 1, a2 # .. e1 : - stq_u t0, 0(a0) # e0 : - addq a0, 8, a0 # .. e1 : - - beq a2, 1f # e1 : - blbc a2, 0f # e1 : - - stq_u zero, 0(a0) # e0 : zero one word - subq a2, 1, a2 # .. e1 : - addq a0, 8, a0 # e0 : - beq a2, 1f # .. e1 : - -0: stq_u zero, 0(a0) # e0 : zero two words - subq a2, 2, a2 # .. e1 : - stq_u zero, 8(a0) # e0 : - addq a0, 16, a0 # .. e1 : - bne a2, 0b # e1 : - unop - -1: ldq_u t0, 0(a0) # e0 : clear the leading bits in the final - subq t10, 1, t7 # .. e1 : word - or t7, t10, t7 # e0 : - zap t0, t7, t0 # e1 (stall) - stq_u t0, 0(a0) # e0 : - ret # .. e1 : - -$zerocount: - mov a0, v0 - ret - - END(__stpncpy) - -libc_hidden_def (__stpncpy) -weak_alias (__stpncpy, stpncpy) diff --git a/sysdeps/alpha/strcat.S b/sysdeps/alpha/strcat.S deleted file mode 100644 index d8ef8f1546..0000000000 --- a/sysdeps/alpha/strcat.S +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 1996, 2003 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>, 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Append a null-terminated string from SRC to DST. */ - -#include <sysdep.h> - - .text - -ENTRY(strcat) - ldgp gp, 0(pv) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - mov a0, v0 # set up return value - - /* Find the end of the string. */ - - ldq_u t0, 0(a0) # load first quadword (a0 may be misaligned) - lda t1, -1(zero) - insqh t1, a0, t1 - andnot a0, 7, a0 - or t1, t0, t0 - cmpbge zero, t0, t1 # t1 <- bitmask: bit i == 1 <==> i-th byte == 0 - bne t1, $found - -$loop: ldq t0, 8(a0) - addq a0, 8, a0 # addr += 8 - cmpbge zero, t0, t1 - beq t1, $loop - -$found: negq t1, t2 # clear all but least set bit - and t1, t2, t1 - - and t1, 0xf0, t2 # binary search for that set bit - and t1, 0xcc, t3 - and t1, 0xaa, t4 - cmovne t2, 4, t2 - cmovne t3, 2, t3 - cmovne t4, 1, t4 - addq t2, t3, t2 - addq a0, t4, a0 - addq a0, t2, a0 - - /* Now do the append. */ - - mov ra, t9 - jmp $31, __stxcpy - - END(strcat) -libc_hidden_builtin_def (strcat) diff --git a/sysdeps/alpha/strchr.S b/sysdeps/alpha/strchr.S deleted file mode 100644 index e0b17415ac..0000000000 --- a/sysdeps/alpha/strchr.S +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (C) 1996, 2003 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@tamu.edu) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Return the address of a given character within a null-terminated - string, or null if it is not found. - - This is generally scheduled for the EV5 (got to look out for my own - interests :-), but with EV4 needs in mind. There *should* be no more - stalls for the EV4 than there are for the EV5. -*/ - -#include <sysdep.h> - - .set noreorder - .set noat - -ENTRY(strchr) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - zapnot a1, 1, a1 # e0 : zero extend the search character - ldq_u t0, 0(a0) # .. e1 : load first quadword - sll a1, 8, t5 # e0 : replicate the search character - andnot a0, 7, v0 # .. e1 : align our loop pointer - or t5, a1, a1 # e0 : - lda t4, -1 # .. e1 : build garbage mask - sll a1, 16, t5 # e0 : - cmpbge zero, t0, t2 # .. e1 : bits set iff byte == zero - mskqh t4, a0, t4 # e0 : - or t5, a1, a1 # .. e1 : - sll a1, 32, t5 # e0 : - cmpbge zero, t4, t4 # .. e1 : bits set iff byte is garbage - or t5, a1, a1 # e0 : - xor t0, a1, t1 # .. e1 : make bytes == c zero - cmpbge zero, t1, t3 # e0 : bits set iff byte == c - or t2, t3, t0 # e1 : bits set iff char match or zero match - andnot t0, t4, t0 # e0 : clear garbage bits - bne t0, $found # .. e1 (zdb) - -$loop: ldq t0, 8(v0) # e0 : - addq v0, 8, v0 # .. e1 : - nop # e0 : - xor t0, a1, t1 # .. e1 (ev5 data stall) - cmpbge zero, t0, t2 # e0 : bits set iff byte == 0 - cmpbge zero, t1, t3 # .. e1 : bits set iff byte == c - or t2, t3, t0 # e0 : - beq t0, $loop # .. e1 (zdb) - -$found: negq t0, t1 # e0 : clear all but least set bit - and t0, t1, t0 # e1 (stall) - - and t0, t3, t1 # e0 : bit set iff byte was the char - beq t1, $retnull # .. e1 (zdb) - - and t0, 0xf0, t2 # e0 : binary search for that set bit - and t0, 0xcc, t3 # .. e1 : - and t0, 0xaa, t4 # e0 : - cmovne t2, 4, t2 # .. e1 : - cmovne t3, 2, t3 # e0 : - cmovne t4, 1, t4 # .. e1 : - addq t2, t3, t2 # e0 : - addq v0, t4, v0 # .. e1 : - addq v0, t2, v0 # e0 : - ret # .. e1 : - -$retnull: - mov zero, v0 # e0 : - ret # .. e1 : - - END(strchr) - -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) diff --git a/sysdeps/alpha/strcmp.S b/sysdeps/alpha/strcmp.S deleted file mode 100644 index 9196be2ce3..0000000000 --- a/sysdeps/alpha/strcmp.S +++ /dev/null @@ -1,195 +0,0 @@ -/* Copyright (C) 1996, 1997, 2003 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Bytewise compare two null-terminated strings. */ - -#include <sysdep.h> - - .set noat - .set noreorder - - .text - -ENTRY(strcmp) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jmp AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - ldq_u t0, 0(a0) # e0 : give cache time to catch up - xor a0, a1, t2 # .. e1 : are s1 and s2 co-aligned? - ldq_u t1, 0(a1) # e0 : - and t2, 7, t2 # .. e1 : - lda t3, -1 # e0 : - bne t2, $unaligned # .. e1 : - - /* On entry to this basic block: - t0 == the first destination word for masking back in - t1 == the first source word. - t3 == -1. */ - -$aligned: - mskqh t3, a0, t3 # e0 : - nop # .. e1 : - ornot t1, t3, t1 # e0 : - ornot t0, t3, t0 # .. e1 : - cmpbge zero, t1, t7 # e0 : bits set iff null found - bne t7, $eos # e1 (zdb) - - /* Aligned compare main loop. - On entry to this basic block: - t0 == an s1 word. - t1 == an s2 word not containing a null. */ - -$a_loop: - xor t0, t1, t2 # e0 : - bne t2, $wordcmp # .. e1 (zdb) - ldq_u t1, 8(a1) # e0 : - ldq_u t0, 8(a0) # .. e1 : - addq a1, 8, a1 # e0 : - addq a0, 8, a0 # .. e1 : - cmpbge zero, t1, t7 # e0 : - beq t7, $a_loop # .. e1 (zdb) - br $eos # e1 : - - /* The two strings are not co-aligned. Align s1 and cope. */ - -$unaligned: - and a0, 7, t4 # e0 : find s1 misalignment - and a1, 7, t5 # .. e1 : find s2 misalignment - subq a1, t4, a1 # e0 : - - /* If s2 misalignment is larger than s2 misalignment, we need - extra startup checks to avoid SEGV. */ - - cmplt t4, t5, t8 # .. e1 : - beq t8, $u_head # e1 : - - mskqh t3, t5, t3 # e0 : - ornot t1, t3, t3 # e0 : - cmpbge zero, t3, t7 # e1 : is there a zero? - beq t7, $u_head # e1 : - - /* We've found a zero in the first partial word of s2. Align - our current s1 and s2 words and compare what we've got. */ - - extql t1, t5, t1 # e0 : - extql t0, a0, t0 # e0 : - cmpbge zero, t1, t7 # .. e1 : find that zero again - br $eos # e1 : and finish up - - .align 3 -$u_head: - /* We know just enough now to be able to assemble the first - full word of s2. We can still find a zero at the end of it. - - On entry to this basic block: - t0 == first word of s1 - t1 == first partial word of s2. */ - - ldq_u t2, 8(a1) # e0 : load second partial s2 word - lda t3, -1 # .. e1 : create leading garbage mask - extql t1, a1, t1 # e0 : create first s2 word - mskqh t3, a0, t3 # e0 : - extqh t2, a1, t4 # e0 : - ornot t0, t3, t0 # .. e1 : kill s1 garbage - or t1, t4, t1 # e0 : s2 word now complete - cmpbge zero, t0, t7 # .. e1 : find zero in first s1 word - ornot t1, t3, t1 # e0 : kill s2 garbage - lda t3, -1 # .. e1 : - mskql t3, a1, t3 # e0 : mask for s2[1] bits we have seen - bne t7, $eos # .. e1 : - xor t0, t1, t4 # e0 : compare aligned words - bne t4, $wordcmp # .. e1 (zdb) - or t2, t3, t3 # e0 : - cmpbge zero, t3, t7 # e1 : - bne t7, $u_final # e1 : - - /* Unaligned copy main loop. In order to avoid reading too much, - the loop is structured to detect zeros in aligned words from s2. - This has, unfortunately, effectively pulled half of a loop - iteration out into the head and half into the tail, but it does - prevent nastiness from accumulating in the very thing we want - to run as fast as possible. - - On entry to this basic block: - t2 == the unshifted low-bits from the next s2 word. */ - - .align 3 -$u_loop: - extql t2, a1, t3 # e0 : - ldq_u t2, 16(a1) # .. e1 : load next s2 high bits - ldq_u t0, 8(a0) # e0 : load next s1 word - addq a1, 8, a1 # .. e1 : - addq a0, 8, a0 # e0 : - nop # .. e1 : - extqh t2, a1, t1 # e0 : - cmpbge zero, t0, t7 # .. e1 : find zero in current s1 word - or t1, t3, t1 # e0 : - bne t7, $eos # .. e1 : - xor t0, t1, t4 # e0 : compare the words - bne t4, $wordcmp # .. e1 (zdb) - cmpbge zero, t2, t4 # e0 : find zero in next low bits - beq t4, $u_loop # .. e1 (zdb) - - /* We've found a zero in the low bits of the last s2 word. Get - the next s1 word and align them. */ -$u_final: - ldq_u t0, 8(a0) # e1 : - extql t2, a1, t1 # .. e0 : - cmpbge zero, t1, t7 # e0 : - - /* We've found a zero somewhere in a word we just read. - On entry to this basic block: - t0 == s1 word - t1 == s2 word - t7 == cmpbge mask containing the zero. */ - - .align 3 -$eos: - negq t7, t6 # e0 : create bytemask of valid data - and t6, t7, t8 # e1 : - subq t8, 1, t6 # e0 : - or t6, t8, t7 # e1 : - zapnot t0, t7, t0 # e0 : kill the garbage - zapnot t1, t7, t1 # .. e1 : - xor t0, t1, v0 # e0 : and compare - beq v0, $done # .. e1 : - - /* Here we have two differing co-aligned words in t0 & t1. - Bytewise compare them and return (t0 > t1 ? 1 : -1). */ -$wordcmp: - cmpbge t0, t1, t2 # e0 : comparison yields bit mask of ge - cmpbge t1, t0, t3 # .. e1 : - xor t2, t3, t0 # e0 : bits set iff t0/t1 bytes differ - negq t0, t1 # e1 : clear all but least bit - and t0, t1, t0 # e0 : - lda v0, -1 # .. e1 : - and t0, t2, t1 # e0 : was bit set in t0 > t1? - cmovne t1, 1, v0 # .. e1 (zdb) - -$done: - ret # e1 : - - END(strcmp) -libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/alpha/strcpy.S b/sysdeps/alpha/strcpy.S deleted file mode 100644 index 02bfe52400..0000000000 --- a/sysdeps/alpha/strcpy.S +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 1996, 2003 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>, 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Copy a null-terminated string from SRC to DST. Return a pointer - to the null-terminator in the source. */ - -#include <sysdep.h> - - .text - -ENTRY(strcpy) - ldgp gp, 0(pv) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - mov a0, v0 # set up return value - mov ra, t9 - jmp $31, __stxcpy # do the copy - - END(strcpy) -libc_hidden_builtin_def (strcpy) diff --git a/sysdeps/alpha/strlen.S b/sysdeps/alpha/strlen.S deleted file mode 100644 index 2560b973c7..0000000000 --- a/sysdeps/alpha/strlen.S +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 1996, 1997, 2003 Free Software Foundation, Inc. - Contributed by David Mosberger (davidm@cs.arizona.edu). - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Finds length of a 0-terminated string. Optimized for the Alpha - architecture: - - - memory accessed as aligned quadwords only - - uses cmpbge to compare 8 bytes in parallel - - does binary search to find 0 byte in last quadword (HAKMEM - needed 12 instructions to do this instead of the 8 instructions - that the binary search needs). -*/ - -#include <sysdep.h> - - .set noreorder - .set noat - -ENTRY(strlen) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - ldq_u t0, 0(a0) # load first quadword (a0 may be misaligned) - lda t1, -1(zero) - insqh t1, a0, t1 - andnot a0, 7, v0 - or t1, t0, t0 - nop # dual issue the next two on ev5 - cmpbge zero, t0, t1 # t1 <- bitmask: bit i == 1 <==> i-th byte == 0 - bne t1, $found - -$loop: ldq t0, 8(v0) - addq v0, 8, v0 # addr += 8 - cmpbge zero, t0, t1 - beq t1, $loop - -$found: negq t1, t2 # clear all but least set bit - and t1, t2, t1 - - and t1, 0xf0, t2 # binary search for that set bit - and t1, 0xcc, t3 - and t1, 0xaa, t4 - cmovne t2, 4, t2 - cmovne t3, 2, t3 - cmovne t4, 1, t4 - addq t2, t3, t2 - addq v0, t4, v0 - addq v0, t2, v0 - nop # dual issue next two on ev4 and ev5 - - subq v0, a0, v0 - ret - - END(strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/alpha/strncat.S b/sysdeps/alpha/strncat.S deleted file mode 100644 index ddf686f578..0000000000 --- a/sysdeps/alpha/strncat.S +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>, 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Append no more than COUNT characters from the null-terminated string SRC - to the null-terminated string DST. Always null-terminate the new DST. */ - -#include <sysdep.h> - - .text - -ENTRY(strncat) - ldgp gp, 0(pv) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - mov a0, v0 # set up return value - beq a2, $zerocount - - /* Find the end of the string. */ - - ldq_u t0, 0(a0) # load first quadword (a0 may be misaligned) - lda t1, -1(zero) - insqh t1, a0, t1 - andnot a0, 7, a0 - or t1, t0, t0 - cmpbge zero, t0, t1 # t1 <- bitmask: bit i == 1 <==> i-th byte == 0 - bne t1, $found - -$loop: ldq t0, 8(a0) - addq a0, 8, a0 # addr += 8 - cmpbge zero, t0, t1 - beq t1, $loop - -$found: negq t1, t2 # clear all but least set bit - and t1, t2, t1 - - and t1, 0xf0, t2 # binary search for that set bit - and t1, 0xcc, t3 - and t1, 0xaa, t4 - cmovne t2, 4, t2 - cmovne t3, 2, t3 - cmovne t4, 1, t4 - addq t2, t3, t2 - addq a0, t4, a0 - addq a0, t2, a0 - - /* Now do the append. */ - - jsr t9, __stxncpy - - /* Worry about the null termination. */ - - zapnot t0, t8, t1 # was last byte a null? - bne t1, 0f - ret - -0: and t10, 0x80, t1 - bne t1, 1f - - /* Here there are bytes left in the current word. Clear one. */ - addq t10, t10, t10 # end-of-count bit <<= 1 - zap t0, t10, t0 - stq_u t0, 0(a0) - ret - -1: /* Here we must read the next DST word and clear the first byte. */ - ldq_u t0, 8(a0) - zap t0, 1, t0 - stq_u t0, 8(a0) - -$zerocount: - ret - - END(strncat) diff --git a/sysdeps/alpha/strncmp.S b/sysdeps/alpha/strncmp.S deleted file mode 100644 index ff199eb743..0000000000 --- a/sysdeps/alpha/strncmp.S +++ /dev/null @@ -1,247 +0,0 @@ -/* Copyright (C) 1996, 1997, 2003 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Bytewise compare two null-terminated strings of length no longer than N. */ - -#include <sysdep.h> - - .set noat - .set noreorder - - .text - -ENTRY(strncmp) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - xor a0, a1, t2 # e0 : are s1 and s2 co-aligned? - beq a2, $zerolength # .. e1 : - ldq_u t0, 0(a0) # e0 : give cache time to catch up - ldq_u t1, 0(a1) # .. e1 : - and t2, 7, t2 # e0 : - and a0, 7, t4 # .. e1 : find s1 misalignment - lda t3, -1 # e0 : - addq a2, t4, a2 # .. e1 : bias count by s1 misalignment - and a2, 7, t10 # e1 : ofs of last byte in last word - srl a2, 3, a2 # .. e0 : remaining full words in count - and a1, 7, t5 # e0 : find s2 misalignment - bne t2, $unaligned # .. e1 : - - /* On entry to this basic block: - t0 == the first word of s1. - t1 == the first word of s2. - t3 == -1. */ - -$aligned: - mskqh t3, a1, t3 # e0 : mask off leading garbage - nop # .. e1 : - ornot t1, t3, t1 # e0 : - ornot t0, t3, t0 # .. e1 : - cmpbge zero, t1, t7 # e0 : bits set iff null found - beq a2, $eoc # .. e1 : check end of count - unop # e0 : - bne t7, $eos # .. e1 : - unop # e0 : - beq t10, $ant_loop # .. e1 : - - /* Aligned compare main loop. - On entry to this basic block: - t0 == an s1 word. - t1 == an s2 word not containing a null. */ - -$a_loop: - xor t0, t1, t2 # e0 : - bne t2, $wordcmp # .. e1 (zdb) - ldq_u t1, 8(a1) # e0 : - ldq_u t0, 8(a0) # .. e1 : - subq a2, 1, a2 # e0 : - addq a1, 8, a1 # .. e1 : - addq a0, 8, a0 # e0 : - beq a2, $eoc # .. e1 : - cmpbge zero, t1, t7 # e0 : - beq t7, $a_loop # .. e1 : - unop # e0 : - br $eos # .. e1 : - - /* Alternate aligned compare loop, for when there's no trailing - bytes on the count. We have to avoid reading too much data. */ -$ant_loop: - xor t0, t1, t2 # e0 : - bne t2, $wordcmp # .. e1 (zdb) - subq a2, 1, a2 # e0 : - beq a2, $zerolength # .. e1 : - ldq_u t1, 8(a1) # e0 : - ldq_u t0, 8(a0) # .. e1 : - addq a1, 8, a1 # e0 : - addq a0, 8, a0 # .. e1 : - cmpbge zero, t1, t7 # e0 : - beq t7, $ant_loop # .. e1 : - unop # e0 : - br $eos # .. e1 : - - /* The two strings are not co-aligned. Align s1 and cope. */ -$unaligned: - subq a1, t4, a1 # e0 : - unop # : - - /* If s2 misalignment is larger than s2 misalignment, we need - extra startup checks to avoid SEGV. */ - - cmplt t4, t5, t8 # .. e1 : - beq t8, $u_head # e1 : - - mskqh t3, t5, t3 # e0 : - ornot t1, t3, t3 # e0 : - cmpbge zero, t3, t7 # e1 : is there a zero? - beq t7, $u_head # e1 : - - /* We've found a zero in the first partial word of s2. Align - our current s1 and s2 words and compare what we've got. */ - - extql t1, t5, t1 # e0 : - lda t3, -1 # .. e1 : - insql t1, a0, t1 # e0 : - mskqh t3, a0, t3 # e0 : - ornot t1, t3, t1 # e0 : - ornot t0, t3, t0 # .. e1 : - cmpbge zero, t1, t7 # e0 : find that zero again - beq a2, $eoc # .. e1 : and finish up - br $eos # e1 : - - .align 3 -$u_head: - /* We know just enough now to be able to assemble the first - full word of s2. We can still find a zero at the end of it. - - On entry to this basic block: - t0 == first word of s1 - t1 == first partial word of s2. */ - - ldq_u t2, 8(a1) # e0 : load second partial s2 word - lda t3, -1 # .. e1 : create leading garbage mask - extql t1, a1, t1 # e0 : create first s2 word - mskqh t3, a0, t3 # e0 : - extqh t2, a1, t4 # e0 : - ornot t0, t3, t0 # .. e1 : kill s1 garbage - or t1, t4, t1 # e0 : s2 word now complete - ornot t1, t3, t1 # e1 : kill s2 garbage - cmpbge zero, t0, t7 # e0 : find zero in first s1 word - beq a2, $eoc # .. e1 : - lda t3, -1 # e0 : - bne t7, $eos # .. e1 : - subq a2, 1, a2 # e0 : - xor t0, t1, t4 # .. e1 : compare aligned words - mskql t3, a1, t3 # e0 : mask out s2[1] bits we have seen - bne t4, $wordcmp # .. e1 : - or t2, t3, t3 # e0 : - cmpbge zero, t3, t7 # e1 : find zero in high bits of s2[1] - bne t7, $u_final # e1 : - - /* Unaligned copy main loop. In order to avoid reading too much, - the loop is structured to detect zeros in aligned words from s2. - This has, unfortunately, effectively pulled half of a loop - iteration out into the head and half into the tail, but it does - prevent nastiness from accumulating in the very thing we want - to run as fast as possible. - - On entry to this basic block: - t2 == the unshifted low-bits from the next s2 word. */ - - .align 3 -$u_loop: - extql t2, a1, t3 # e0 : - ldq_u t2, 16(a1) # .. e1 : load next s2 high bits - ldq_u t0, 8(a0) # e0 : load next s1 word - addq a1, 8, a1 # .. e1 : - addq a0, 8, a0 # e0 : - nop # .. e1 : - extqh t2, a1, t1 # e0 : - cmpbge zero, t0, t7 # .. e1 : find zero in current s1 word - or t1, t3, t1 # e0 : - beq a2, $eoc # .. e1 : check for end of count - subq a2, 1, a2 # e0 : - bne t7, $eos # .. e1 : - xor t0, t1, t4 # e0 : compare the words - bne t4, $wordcmp # .. e1 (zdb) - cmpbge zero, t2, t4 # e0 : find zero in next low bits - beq t4, $u_loop # .. e1 (zdb) - - /* We've found a zero in the low bits of the last s2 word. Get - the next s1 word and align them. */ -$u_final: - ldq_u t0, 8(a0) # e1 : - extql t2, a1, t1 # .. e0 : - cmpbge zero, t1, t7 # e0 : - bne a2, $eos # .. e1 : - - /* We've hit end of count. Zero everything after the count - and compare whats left. */ - - .align 3 -$eoc: - mskql t0, t10, t0 - mskql t1, t10, t1 - unop - cmpbge zero, t1, t7 - - /* We've found a zero somewhere in a word we just read. - On entry to this basic block: - t0 == s1 word - t1 == s2 word - t7 == cmpbge mask containing the zero. */ - -$eos: - negq t7, t6 # e0 : create bytemask of valid data - and t6, t7, t8 # e1 : - subq t8, 1, t6 # e0 : - or t6, t8, t7 # e1 : - zapnot t0, t7, t0 # e0 : kill the garbage - zapnot t1, t7, t1 # .. e1 : - xor t0, t1, v0 # e0 : and compare - beq v0, $done # .. e1 : - - /* Here we have two differing co-aligned words in t0 & t1. - Bytewise compare them and return (t0 > t1 ? 1 : -1). */ - .align 3 -$wordcmp: - cmpbge t0, t1, t2 # e0 : comparison yields bit mask of ge - cmpbge t1, t0, t3 # .. e1 : - xor t2, t3, t0 # e0 : bits set iff t0/t1 bytes differ - negq t0, t1 # e1 : clear all but least bit - and t0, t1, t0 # e0 : - lda v0, -1 # .. e1 : - and t0, t2, t1 # e0 : was bit set in t0 > t1? - cmovne t1, 1, v0 # .. e1 (zdb) - -$done: - ret # e1 : - - .align 3 -$zerolength: - clr v0 - ret - - END(strncmp) -libc_hidden_builtin_def (strncmp) diff --git a/sysdeps/alpha/strncpy.S b/sysdeps/alpha/strncpy.S deleted file mode 100644 index 5d3e72e280..0000000000 --- a/sysdeps/alpha/strncpy.S +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright (C) 1996, 1997, 2003 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Copy no more than COUNT bytes of the null-terminated string from - SRC to DST. If SRC does not cover all of COUNT, the balance is - zeroed. */ - -#include <sysdep.h> - - .set noat - .set noreorder - - .text - -ENTRY(strncpy) - ldgp gp, 0(pv) -#ifdef PROF - lda AT, _mcount - jsr AT, (AT), _mcount -#endif - .prologue 1 - - mov a0, v0 # set return value now - beq a2, $zerocount - jsr t9, __stxncpy # do the work of the copy - - bne a2, $multiword # do we have full words left? - - .align 3 - subq t8, 1, t2 # e0 : guess not - subq t10, 1, t3 # .. e1 : - or t2, t8, t2 # e0 : clear the bits between the last - or t3, t10, t3 # .. e1 : written byte and the last byte in - andnot t3, t2, t3 # e0 : COUNT - zap t0, t3, t0 # e1 : - stq_u t0, 0(a0) # e0 : - ret # .. e1 : - -$multiword: - subq t8, 1, t7 # e0 : clear the final bits in the prev - or t7, t8, t7 # e1 : word - zapnot t0, t7, t0 # e0 : - subq a2, 1, a2 # .. e1 : - stq_u t0, 0(a0) # e0 : - addq a0, 8, a0 # .. e1 : - - beq a2, 1f # e1 : - blbc a2, 0f # e1 : - - stq_u zero, 0(a0) # e0 : zero one word - subq a2, 1, a2 # .. e1 : - addq a0, 8, a0 # e0 : - beq a2, 1f # .. e1 : - -0: stq_u zero, 0(a0) # e0 : zero two words - subq a2, 2, a2 # .. e1 : - stq_u zero, 8(a0) # e0 : - addq a0, 16, a0 # .. e1 : - bne a2, 0b # e1 : - unop - -1: ldq_u t0, 0(a0) # e0 : clear the leading bits in the final - subq t10, 1, t7 # .. e1 : word - or t7, t10, t7 # e0 : - zap t0, t7, t0 # e1 (stall) - stq_u t0, 0(a0) # e0 : - -$zerocount: - ret # .. e1 : - - END(strncpy) -libc_hidden_builtin_def (strncpy) diff --git a/sysdeps/alpha/strrchr.S b/sysdeps/alpha/strrchr.S deleted file mode 100644 index 248181f702..0000000000 --- a/sysdeps/alpha/strrchr.S +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright (C) 1996, 1997, 2003 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Return the address of the last occurrence of a given character - within a null-terminated string, or null if it is not found. - - This is generally scheduled for the EV5 (got to look out for my own - interests :-), but with EV4 needs in mind. There are, in fact, fewer - stalls on the EV4 than there are on the EV5. -*/ - -#include <sysdep.h> - - .set noreorder - .set noat - -ENTRY(strrchr) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - and a1, 0xff, a1 # e0 : zero extend our test character - mov zero, t6 # .. e1 : t6 is last match aligned addr - sll a1, 8, t5 # e0 : replicate our test character - mov zero, t7 # .. e1 : t7 is last match byte compare mask - or t5, a1, a1 # e0 : - ldq_u t0, 0(a0) # .. e1 : load first quadword - sll a1, 16, t5 # e0 : - andnot a0, 7, v0 # .. e1 : align source addr - or t5, a1, a1 # e0 : - lda t4, -1 # .. e1 : build garbage mask - sll a1, 32, t5 # e0 : - cmpbge zero, t0, t1 # .. e1 : bits set iff byte == zero - mskqh t4, a0, t4 # e0 : - or t5, a1, a1 # .. e1 : character replication complete - xor t0, a1, t2 # e0 : make bytes == c zero - cmpbge zero, t4, t4 # .. e1 : bits set iff byte is garbage - cmpbge zero, t2, t3 # e0 : bits set iff byte == c - andnot t1, t4, t1 # .. e1 : clear garbage from null test - andnot t3, t4, t3 # e0 : clear garbage from char test - bne t1, $eos # .. e1 : did we already hit the terminator? - - /* Character search main loop */ -$loop: - ldq t0, 8(v0) # e0 : load next quadword - cmovne t3, v0, t6 # .. e1 : save previous comparisons match - cmovne t3, t3, t7 # e0 : - addq v0, 8, v0 # .. e1 : - xor t0, a1, t2 # e0 : - cmpbge zero, t0, t1 # .. e1 : bits set iff byte == zero - cmpbge zero, t2, t3 # e0 : bits set iff byte == c - beq t1, $loop # .. e1 : if we havnt seen a null, loop - - /* Mask out character matches after terminator */ -$eos: - negq t1, t4 # e0 : isolate first null byte match - and t1, t4, t4 # e1 : - subq t4, 1, t5 # e0 : build a mask of the bytes upto... - or t4, t5, t4 # e1 : ... and including the null - - and t3, t4, t3 # e0 : mask out char matches after null - cmovne t3, t3, t7 # .. e1 : save it, if match found - cmovne t3, v0, t6 # e0 : - - /* Locate the address of the last matched character */ - - /* Retain the early exit for the ev4 -- the ev5 mispredict penalty - is 5 cycles -- the same as just falling through. */ - beq t7, $retnull # .. e1 : - - and t7, 0xf0, t2 # e0 : binary search for the high bit set - cmovne t2, t2, t7 # .. e1 (zdb) - cmovne t2, 4, t2 # e0 : - and t7, 0xcc, t1 # .. e1 : - cmovne t1, t1, t7 # e0 : - cmovne t1, 2, t1 # .. e1 : - and t7, 0xaa, t0 # e0 : - cmovne t0, 1, t0 # .. e1 (zdb) - addq t2, t1, t1 # e0 : - addq t6, t0, v0 # .. e1 : add our aligned base ptr to the mix - addq v0, t1, v0 # e0 : - ret # .. e1 : - -$retnull: - mov zero, v0 # e0 : - ret # .. e1 : - - END(strrchr) - -weak_alias (strrchr, rindex) -libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/alpha/stxcpy.S b/sysdeps/alpha/stxcpy.S deleted file mode 100644 index 5ba2d43e54..0000000000 --- a/sysdeps/alpha/stxcpy.S +++ /dev/null @@ -1,307 +0,0 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Copy a null-terminated string from SRC to DST. - - This is an internal routine used by strcpy, stpcpy, and strcat. - As such, it uses special linkage conventions to make implementation - of these public functions more efficient. - - On input: - t9 = return address - a0 = DST - a1 = SRC - - On output: - t8 = bitmask (with one bit set) indicating the last byte written - a0 = unaligned address of the last *word* written - - Furthermore, v0, a3-a5, t11, and t12 are untouched. -*/ - -/* This is generally scheduled for the EV5, but should still be pretty - good for the EV4 too. */ - -#include <sysdep.h> - - .set noat - .set noreorder - - .text - -/* There is a problem with either gdb (as of 4.16) or gas (as of 2.7) that - doesn't like putting the entry point for a procedure somewhere in the - middle of the procedure descriptor. Work around this by putting the - aligned copy in its own procedure descriptor */ - - .ent stxcpy_aligned - .align 3 -stxcpy_aligned: - .frame sp, 0, t9 - .prologue 0 - - /* On entry to this basic block: - t0 == the first destination word for masking back in - t1 == the first source word. */ - - /* Create the 1st output word and detect 0's in the 1st input word. */ - lda t2, -1 # e1 : build a mask against false zero - mskqh t2, a1, t2 # e0 : detection in the src word - mskqh t1, a1, t3 # e0 : - ornot t1, t2, t2 # .. e1 : - mskql t0, a1, t0 # e0 : assemble the first output word - cmpbge zero, t2, t7 # .. e1 : bits set iff null found - or t0, t3, t1 # e0 : - bne t7, $a_eos # .. e1 : - - /* On entry to this basic block: - t0 == the first destination word for masking back in - t1 == a source word not containing a null. */ - -$a_loop: - stq_u t1, 0(a0) # e0 : - addq a0, 8, a0 # .. e1 : - ldq_u t1, 0(a1) # e0 : - addq a1, 8, a1 # .. e1 : - cmpbge zero, t1, t7 # e0 (stall) - beq t7, $a_loop # .. e1 (zdb) - - /* Take care of the final (partial) word store. - On entry to this basic block we have: - t1 == the source word containing the null - t7 == the cmpbge mask that found it. */ -$a_eos: - negq t7, t6 # e0 : find low bit set - and t7, t6, t8 # e1 (stall) - - /* For the sake of the cache, don't read a destination word - if we're not going to need it. */ - and t8, 0x80, t6 # e0 : - bne t6, 1f # .. e1 (zdb) - - /* We're doing a partial word store and so need to combine - our source and original destination words. */ - ldq_u t0, 0(a0) # e0 : - subq t8, 1, t6 # .. e1 : - zapnot t1, t6, t1 # e0 : clear src bytes >= null - or t8, t6, t7 # .. e1 : - zap t0, t7, t0 # e0 : clear dst bytes <= null - or t0, t1, t1 # e1 : - -1: stq_u t1, 0(a0) # e0 : - ret (t9) # .. e1 : - - .end stxcpy_aligned - - .align 3 - .ent __stxcpy - .globl __stxcpy -__stxcpy: - .frame sp, 0, t9 - .prologue 0 - - /* Are source and destination co-aligned? */ - xor a0, a1, t0 # e0 : - unop # : - and t0, 7, t0 # e0 : - bne t0, $unaligned # .. e1 : - - /* We are co-aligned; take care of a partial first word. */ - ldq_u t1, 0(a1) # e0 : load first src word - and a0, 7, t0 # .. e1 : take care not to load a word ... - addq a1, 8, a1 # e0 : - beq t0, stxcpy_aligned # .. e1 : ... if we wont need it - ldq_u t0, 0(a0) # e0 : - br stxcpy_aligned # .. e1 : - - -/* The source and destination are not co-aligned. Align the destination - and cope. We have to be very careful about not reading too much and - causing a SEGV. */ - - .align 3 -$u_head: - /* We know just enough now to be able to assemble the first - full source word. We can still find a zero at the end of it - that prevents us from outputting the whole thing. - - On entry to this basic block: - t0 == the first dest word, for masking back in, if needed else 0 - t1 == the low bits of the first source word - t6 == bytemask that is -1 in dest word bytes */ - - ldq_u t2, 8(a1) # e0 : - addq a1, 8, a1 # .. e1 : - - extql t1, a1, t1 # e0 : - extqh t2, a1, t4 # e0 : - mskql t0, a0, t0 # e0 : - or t1, t4, t1 # .. e1 : - mskqh t1, a0, t1 # e0 : - or t0, t1, t1 # e1 : - - or t1, t6, t6 # e0 : - cmpbge zero, t6, t7 # .. e1 : - lda t6, -1 # e0 : for masking just below - bne t7, $u_final # .. e1 : - - mskql t6, a1, t6 # e0 : mask out the bits we have - or t6, t2, t2 # e1 : already extracted before - cmpbge zero, t2, t7 # e0 : testing eos - bne t7, $u_late_head_exit # .. e1 (zdb) - - /* Finally, we've got all the stupid leading edge cases taken care - of and we can set up to enter the main loop. */ - - stq_u t1, 0(a0) # e0 : store first output word - addq a0, 8, a0 # .. e1 : - extql t2, a1, t0 # e0 : position ho-bits of lo word - ldq_u t2, 8(a1) # .. e1 : read next high-order source word - addq a1, 8, a1 # e0 : - cmpbge zero, t2, t7 # .. e1 : - nop # e0 : - bne t7, $u_eos # .. e1 : - - /* Unaligned copy main loop. In order to avoid reading too much, - the loop is structured to detect zeros in aligned source words. - This has, unfortunately, effectively pulled half of a loop - iteration out into the head and half into the tail, but it does - prevent nastiness from accumulating in the very thing we want - to run as fast as possible. - - On entry to this basic block: - t0 == the shifted high-order bits from the previous source word - t2 == the unshifted current source word - - We further know that t2 does not contain a null terminator. */ - - .align 3 -$u_loop: - extqh t2, a1, t1 # e0 : extract high bits for current word - addq a1, 8, a1 # .. e1 : - extql t2, a1, t3 # e0 : extract low bits for next time - addq a0, 8, a0 # .. e1 : - or t0, t1, t1 # e0 : current dst word now complete - ldq_u t2, 0(a1) # .. e1 : load high word for next time - stq_u t1, -8(a0) # e0 : save the current word - mov t3, t0 # .. e1 : - cmpbge zero, t2, t7 # e0 : test new word for eos - beq t7, $u_loop # .. e1 : - - /* We've found a zero somewhere in the source word we just read. - If it resides in the lower half, we have one (probably partial) - word to write out, and if it resides in the upper half, we - have one full and one partial word left to write out. - - On entry to this basic block: - t0 == the shifted high-order bits from the previous source word - t2 == the unshifted current source word. */ -$u_eos: - extqh t2, a1, t1 # e0 : - or t0, t1, t1 # e1 : first (partial) source word complete - - cmpbge zero, t1, t7 # e0 : is the null in this first bit? - bne t7, $u_final # .. e1 (zdb) - -$u_late_head_exit: - stq_u t1, 0(a0) # e0 : the null was in the high-order bits - addq a0, 8, a0 # .. e1 : - extql t2, a1, t1 # e0 : - cmpbge zero, t1, t7 # .. e1 : - - /* Take care of a final (probably partial) result word. - On entry to this basic block: - t1 == assembled source word - t7 == cmpbge mask that found the null. */ -$u_final: - negq t7, t6 # e0 : isolate low bit set - and t6, t7, t8 # e1 : - - and t8, 0x80, t6 # e0 : avoid dest word load if we can - bne t6, 1f # .. e1 (zdb) - - ldq_u t0, 0(a0) # e0 : - subq t8, 1, t6 # .. e1 : - or t6, t8, t7 # e0 : - zapnot t1, t6, t1 # .. e1 : kill source bytes >= null - zap t0, t7, t0 # e0 : kill dest bytes <= null - or t0, t1, t1 # e1 : - -1: stq_u t1, 0(a0) # e0 : - ret (t9) # .. e1 : - - /* Unaligned copy entry point. */ - .align 3 -$unaligned: - - ldq_u t1, 0(a1) # e0 : load first source word - - and a0, 7, t4 # .. e1 : find dest misalignment - and a1, 7, t5 # e0 : find src misalignment - - /* Conditionally load the first destination word and a bytemask - with 0xff indicating that the destination byte is sacrosanct. */ - - mov zero, t0 # .. e1 : - mov zero, t6 # e0 : - beq t4, 1f # .. e1 : - ldq_u t0, 0(a0) # e0 : - lda t6, -1 # .. e1 : - mskql t6, a0, t6 # e0 : -1: - subq a1, t4, a1 # .. e1 : sub dest misalignment from src addr - - /* If source misalignment is larger than dest misalignment, we need - extra startup checks to avoid SEGV. */ - - cmplt t4, t5, t8 # e0 : - beq t8, $u_head # .. e1 (zdb) - - lda t2, -1 # e1 : mask out leading garbage in source - mskqh t2, t5, t2 # e0 : - nop # e0 : - ornot t1, t2, t3 # .. e1 : - cmpbge zero, t3, t7 # e0 : is there a zero? - beq t7, $u_head # .. e1 (zdb) - - /* At this point we've found a zero in the first partial word of - the source. We need to isolate the valid source data and mask - it into the original destination data. (Incidentally, we know - that we'll need at least one byte of that original dest word.) */ - - ldq_u t0, 0(a0) # e0 : - - negq t7, t6 # .. e1 : build bitmask of bytes <= zero - and t6, t7, t8 # e0 : - and a1, 7, t5 # .. e1 : - subq t8, 1, t6 # e0 : - or t6, t8, t7 # e1 : - srl t8, t5, t8 # e0 : adjust final null return value - - zapnot t2, t7, t2 # .. e1 : prepare source word; mirror changes - and t1, t2, t1 # e1 : to source validity mask - extql t2, a1, t2 # .. e0 : - extql t1, a1, t1 # e0 : - - andnot t0, t2, t0 # .. e1 : zero place for source to reside - or t0, t1, t1 # e1 : and put it there - stq_u t1, 0(a0) # .. e0 : - ret (t9) - - .end __stxcpy diff --git a/sysdeps/alpha/stxncpy.S b/sysdeps/alpha/stxncpy.S deleted file mode 100644 index 73bcd36e47..0000000000 --- a/sysdeps/alpha/stxncpy.S +++ /dev/null @@ -1,363 +0,0 @@ -/* Copyright (C) 1996, 1997, 2002 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Copy no more than COUNT bytes of the null-terminated string from - SRC to DST. - - This is an internal routine used by strncpy, stpncpy, and strncat. - As such, it uses special linkage conventions to make implementation - of these public functions more efficient. - - On input: - t9 = return address - a0 = DST - a1 = SRC - a2 = COUNT - - Furthermore, COUNT may not be zero. - - On output: - t0 = last word written - t8 = bitmask (with one bit set) indicating the last byte written - t10 = bitmask (with one bit set) indicating the byte position of - the end of the range specified by COUNT - a0 = unaligned address of the last *word* written - a2 = the number of full words left in COUNT - - Furthermore, v0, a3-a5, t11, and t12 are untouched. -*/ - - -/* This is generally scheduled for the EV5, but should still be pretty - good for the EV4 too. */ - -#include <sysdep.h> - - .set noat - .set noreorder - - .text - -/* There is a problem with either gdb (as of 4.16) or gas (as of 2.7) that - doesn't like putting the entry point for a procedure somewhere in the - middle of the procedure descriptor. Work around this by putting the - aligned copy in its own procedure descriptor */ - - .ent stxncpy_aligned - .align 3 -stxncpy_aligned: - .frame sp, 0, t9, 0 - .prologue 0 - - /* On entry to this basic block: - t0 == the first destination word for masking back in - t1 == the first source word. */ - - /* Create the 1st output word and detect 0's in the 1st input word. */ - lda t2, -1 # e1 : build a mask against false zero - mskqh t2, a1, t2 # e0 : detection in the src word - mskqh t1, a1, t3 # e0 : - ornot t1, t2, t2 # .. e1 : - mskql t0, a1, t0 # e0 : assemble the first output word - cmpbge zero, t2, t7 # .. e1 : bits set iff null found - or t0, t3, t0 # e0 : - beq a2, $a_eoc # .. e1 : - bne t7, $a_eos # .. e1 : - - /* On entry to this basic block: - t0 == a source word not containing a null. */ - -$a_loop: - stq_u t0, 0(a0) # e0 : - addq a0, 8, a0 # .. e1 : - ldq_u t0, 0(a1) # e0 : - addq a1, 8, a1 # .. e1 : - subq a2, 1, a2 # e0 : - cmpbge zero, t0, t7 # .. e1 (stall) - beq a2, $a_eoc # e1 : - beq t7, $a_loop # e1 : - - /* Take care of the final (partial) word store. At this point - the end-of-count bit is set in t7 iff it applies. - - On entry to this basic block we have: - t0 == the source word containing the null - t7 == the cmpbge mask that found it. */ - -$a_eos: - negq t7, t8 # e0 : find low bit set - and t7, t8, t8 # e1 (stall) - - /* For the sake of the cache, don't read a destination word - if we're not going to need it. */ - and t8, 0x80, t6 # e0 : - bne t6, 1f # .. e1 (zdb) - - /* We're doing a partial word store and so need to combine - our source and original destination words. */ - ldq_u t1, 0(a0) # e0 : - subq t8, 1, t6 # .. e1 : - or t8, t6, t7 # e0 : - unop # - zapnot t0, t7, t0 # e0 : clear src bytes > null - zap t1, t7, t1 # .. e1 : clear dst bytes <= null - or t0, t1, t0 # e1 : - -1: stq_u t0, 0(a0) # e0 : - ret (t9) # e1 : - - /* Add the end-of-count bit to the eos detection bitmask. */ -$a_eoc: - or t10, t7, t7 - br $a_eos - - .end stxncpy_aligned - - .align 3 - .ent __stxncpy - .globl __stxncpy -__stxncpy: - .frame sp, 0, t9, 0 - .prologue 0 - - /* Are source and destination co-aligned? */ - xor a0, a1, t1 # e0 : - and a0, 7, t0 # .. e1 : find dest misalignment - and t1, 7, t1 # e0 : - addq a2, t0, a2 # .. e1 : bias count by dest misalignment - subq a2, 1, a2 # e0 : - and a2, 7, t2 # e1 : - srl a2, 3, a2 # e0 : a2 = loop counter = (count - 1)/8 - addq zero, 1, t10 # .. e1 : - sll t10, t2, t10 # e0 : t10 = bitmask of last count byte - bne t1, $unaligned # .. e1 : - - /* We are co-aligned; take care of a partial first word. */ - - ldq_u t1, 0(a1) # e0 : load first src word - addq a1, 8, a1 # .. e1 : - - beq t0, stxncpy_aligned # avoid loading dest word if not needed - ldq_u t0, 0(a0) # e0 : - br stxncpy_aligned # .. e1 : - - -/* The source and destination are not co-aligned. Align the destination - and cope. We have to be very careful about not reading too much and - causing a SEGV. */ - - .align 3 -$u_head: - /* We know just enough now to be able to assemble the first - full source word. We can still find a zero at the end of it - that prevents us from outputting the whole thing. - - On entry to this basic block: - t0 == the first dest word, unmasked - t1 == the shifted low bits of the first source word - t6 == bytemask that is -1 in dest word bytes */ - - ldq_u t2, 8(a1) # e0 : load second src word - addq a1, 8, a1 # .. e1 : - mskql t0, a0, t0 # e0 : mask trailing garbage in dst - extqh t2, a1, t4 # e0 : - or t1, t4, t1 # e1 : first aligned src word complete - mskqh t1, a0, t1 # e0 : mask leading garbage in src - or t0, t1, t0 # e0 : first output word complete - or t0, t6, t6 # e1 : mask original data for zero test - cmpbge zero, t6, t7 # e0 : - beq a2, $u_eocfin # .. e1 : - lda t6, -1 # e0 : - bne t7, $u_final # .. e1 : - - mskql t6, a1, t6 # e0 : mask out bits already seen - nop # .. e1 : - stq_u t0, 0(a0) # e0 : store first output word - or t6, t2, t2 # .. e1 : - cmpbge zero, t2, t7 # e0 : find nulls in second partial - addq a0, 8, a0 # .. e1 : - subq a2, 1, a2 # e0 : - bne t7, $u_late_head_exit # .. e1 : - - /* Finally, we've got all the stupid leading edge cases taken care - of and we can set up to enter the main loop. */ - - extql t2, a1, t1 # e0 : position hi-bits of lo word - beq a2, $u_eoc # .. e1 : - ldq_u t2, 8(a1) # e0 : read next high-order source word - addq a1, 8, a1 # .. e1 : - extqh t2, a1, t0 # e0 : position lo-bits of hi word - cmpbge zero, t2, t7 # .. e1 : test new word for eos - nop # e0 : - bne t7, $u_eos # .. e1 : - - /* Unaligned copy main loop. In order to avoid reading too much, - the loop is structured to detect zeros in aligned source words. - This has, unfortunately, effectively pulled half of a loop - iteration out into the head and half into the tail, but it does - prevent nastiness from accumulating in the very thing we want - to run as fast as possible. - - On entry to this basic block: - t0 == the shifted low-order bits from the current source word - t1 == the shifted high-order bits from the previous source word - t2 == the unshifted current source word - - We further know that t2 does not contain a null terminator. */ - - .align 3 -$u_loop: - or t0, t1, t0 # e0 : current dst word now complete - subq a2, 1, a2 # .. e1 : decrement word count - stq_u t0, 0(a0) # e0 : save the current word - addq a0, 8, a0 # .. e1 : - extql t2, a1, t1 # e0 : extract high bits for next time - beq a2, $u_eoc # .. e1 : - ldq_u t2, 8(a1) # e0 : load high word for next time - addq a1, 8, a1 # .. e1 : - nop # e0 : - cmpbge zero, t2, t7 # .. e1 : test new word for eos - extqh t2, a1, t0 # e0 : extract low bits for current word - beq t7, $u_loop # .. e1 : - - /* We've found a zero somewhere in the source word we just read. - If it resides in the lower half, we have one (probably partial) - word to write out, and if it resides in the upper half, we - have one full and one partial word left to write out. - - On entry to this basic block: - t0 == the shifted low-order bits from the current source word - t1 == the shifted high-order bits from the previous source word - t2 == the unshifted current source word. */ -$u_eos: - or t0, t1, t0 # e0 : first (partial) source word complete - cmpbge zero, t0, t7 # e0 : is the null in this first bit? - bne t7, $u_final # .. e1 (zdb) - - stq_u t0, 0(a0) # e0 : the null was in the high-order bits - addq a0, 8, a0 # .. e1 : - subq a2, 1, a2 # e0 : - -$u_late_head_exit: - extql t2, a1, t0 # e0 : - cmpbge zero, t0, t7 # e0 : - or t7, t10, t6 # e1 : - cmoveq a2, t6, t7 # e0 : - - /* Take care of a final (probably partial) result word. - On entry to this basic block: - t0 == assembled source word - t7 == cmpbge mask that found the null. */ -$u_final: - negq t7, t6 # e0 : isolate low bit set - and t6, t7, t8 # e1 : - - and t8, 0x80, t6 # e0 : avoid dest word load if we can - bne t6, 1f # .. e1 (zdb) - - ldq_u t1, 0(a0) # e0 : - subq t8, 1, t6 # .. e1 : - or t6, t8, t7 # e0 : - zapnot t0, t7, t0 # .. e1 : kill source bytes > null - zap t1, t7, t1 # e0 : kill dest bytes <= null - or t0, t1, t0 # e1 : - -1: stq_u t0, 0(a0) # e0 : - ret (t9) # .. e1 : - - /* Got to end-of-count before end of string. - On entry to this basic block: - t1 == the shifted high-order bits from the previous source word */ -$u_eoc: - and a1, 7, t6 # e1 : - sll t10, t6, t6 # e0 : - and t6, 0xff, t6 # e0 : - bne t6, 1f # e1 : avoid src word load if we can - - ldq_u t2, 8(a1) # e0 : load final src word - nop # .. e1 : - extqh t2, a1, t0 # e0 : extract high bits for last word - or t1, t0, t1 # e1 : - -1: cmpbge zero, t1, t7 - mov t1, t0 - -$u_eocfin: # end-of-count, final word - or t10, t7, t7 - br $u_final - - /* Unaligned copy entry point. */ - .align 3 -$unaligned: - - ldq_u t1, 0(a1) # e0 : load first source word - - and a0, 7, t4 # .. e1 : find dest misalignment - and a1, 7, t5 # e0 : find src misalignment - - /* Conditionally load the first destination word and a bytemask - with 0xff indicating that the destination byte is sacrosanct. */ - - mov zero, t0 # .. e1 : - mov zero, t6 # e0 : - beq t4, 1f # .. e1 : - ldq_u t0, 0(a0) # e0 : - lda t6, -1 # .. e1 : - mskql t6, a0, t6 # e0 : -1: - subq a1, t4, a1 # .. e1 : sub dest misalignment from src addr - - /* If source misalignment is larger than dest misalignment, we need - extra startup checks to avoid SEGV. */ - - cmplt t4, t5, t8 # e1 : - extql t1, a1, t1 # .. e0 : shift src into place - lda t2, -1 # e0 : for creating masks later - beq t8, $u_head # e1 : - - mskqh t2, t5, t2 # e0 : begin src byte validity mask - cmpbge zero, t1, t7 # .. e1 : is there a zero? - extql t2, a1, t2 # e0 : - or t7, t10, t5 # .. e1 : test for end-of-count too - cmpbge zero, t2, t3 # e0 : - cmoveq a2, t5, t7 # .. e1 : - andnot t7, t3, t7 # e0 : - beq t7, $u_head # .. e1 (zdb) - - /* At this point we've found a zero in the first partial word of - the source. We need to isolate the valid source data and mask - it into the original destination data. (Incidentally, we know - that we'll need at least one byte of that original dest word.) */ - - ldq_u t0, 0(a0) # e0 : - negq t7, t6 # .. e1 : build bitmask of bytes <= zero - mskqh t1, t4, t1 # e0 : - and t6, t7, t8 # .. e1 : - subq t8, 1, t6 # e0 : - or t6, t8, t7 # e1 : - - zapnot t2, t7, t2 # e0 : prepare source word; mirror changes - zapnot t1, t7, t1 # .. e1 : to source validity mask - - andnot t0, t2, t0 # e0 : zero place for source to reside - or t0, t1, t0 # e1 : and put it there - stq_u t0, 0(a0) # e0 : - ret (t9) # .. e1 : - - .end __stxncpy diff --git a/sysdeps/alpha/sub_n.s b/sysdeps/alpha/sub_n.s deleted file mode 100644 index e0a6d5c6bd..0000000000 --- a/sysdeps/alpha/sub_n.s +++ /dev/null @@ -1,120 +0,0 @@ - # Alpha __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and - # store difference in a third limb vector. - - # Copyright (C) 1995 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP 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 Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP 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. - - - # INPUT PARAMETERS - # res_ptr $16 - # s1_ptr $17 - # s2_ptr $18 - # size $19 - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_sub_n - .ent __mpn_sub_n -__mpn_sub_n: - .frame $30,0,$26,0 - - ldq $3,0($17) - ldq $4,0($18) - - subq $19,1,$19 - and $19,4-1,$2 # number of limbs in first loop - bis $31,$31,$0 - beq $2,.L0 # if multiple of 4 limbs, skip first loop - - subq $19,$2,$19 - -.Loop0: subq $2,1,$2 - ldq $5,8($17) - addq $4,$0,$4 - ldq $6,8($18) - cmpult $4,$0,$1 - subq $3,$4,$4 - cmpult $3,$4,$0 - stq $4,0($16) - or $0,$1,$0 - - addq $17,8,$17 - addq $18,8,$18 - bis $5,$5,$3 - bis $6,$6,$4 - addq $16,8,$16 - bne $2,.Loop0 - -.L0: beq $19,.Lend - - .align 3 -.Loop: subq $19,4,$19 - - ldq $5,8($17) - addq $4,$0,$4 - ldq $6,8($18) - cmpult $4,$0,$1 - subq $3,$4,$4 - cmpult $3,$4,$0 - stq $4,0($16) - or $0,$1,$0 - - ldq $3,16($17) - addq $6,$0,$6 - ldq $4,16($18) - cmpult $6,$0,$1 - subq $5,$6,$6 - cmpult $5,$6,$0 - stq $6,8($16) - or $0,$1,$0 - - ldq $5,24($17) - addq $4,$0,$4 - ldq $6,24($18) - cmpult $4,$0,$1 - subq $3,$4,$4 - cmpult $3,$4,$0 - stq $4,16($16) - or $0,$1,$0 - - ldq $3,32($17) - addq $6,$0,$6 - ldq $4,32($18) - cmpult $6,$0,$1 - subq $5,$6,$6 - cmpult $5,$6,$0 - stq $6,24($16) - or $0,$1,$0 - - addq $17,32,$17 - addq $18,32,$18 - addq $16,32,$16 - bne $19,.Loop - -.Lend: addq $4,$0,$4 - cmpult $4,$0,$1 - subq $3,$4,$4 - cmpult $3,$4,$0 - stq $4,0($16) - or $0,$1,$0 - ret $31,($26),1 - - .end __mpn_sub_n diff --git a/sysdeps/alpha/submul_1.s b/sysdeps/alpha/submul_1.s deleted file mode 100644 index 5343f67d81..0000000000 --- a/sysdeps/alpha/submul_1.s +++ /dev/null @@ -1,92 +0,0 @@ - # Alpha 21064 __mpn_submul_1 -- Multiply a limb vector with a limb and - # subtract the result from a second limb vector. - - # Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP 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 Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP 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. - - - # INPUT PARAMETERS - # res_ptr r16 - # s1_ptr r17 - # size r18 - # s2_limb r19 - - # This code runs at 42 cycles/limb on EV4 and 18 cycles/limb on EV5. - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_submul_1 - .ent __mpn_submul_1 2 -__mpn_submul_1: - .frame $30,0,$26 - - ldq $2,0($17) # $2 = s1_limb - addq $17,8,$17 # s1_ptr++ - subq $18,1,$18 # size-- - mulq $2,$19,$3 # $3 = prod_low - ldq $5,0($16) # $5 = *res_ptr - umulh $2,$19,$0 # $0 = prod_high - beq $18,.Lend1 # jump if size was == 1 - ldq $2,0($17) # $2 = s1_limb - addq $17,8,$17 # s1_ptr++ - subq $18,1,$18 # size-- - subq $5,$3,$3 - cmpult $5,$3,$4 - stq $3,0($16) - addq $16,8,$16 # res_ptr++ - beq $18,.Lend2 # jump if size was == 2 - - .align 3 -.Loop: mulq $2,$19,$3 # $3 = prod_low - ldq $5,0($16) # $5 = *res_ptr - addq $4,$0,$0 # cy_limb = cy_limb + 'cy' - subq $18,1,$18 # size-- - umulh $2,$19,$4 # $4 = cy_limb - ldq $2,0($17) # $2 = s1_limb - addq $17,8,$17 # s1_ptr++ - addq $3,$0,$3 # $3 = cy_limb + prod_low - cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) - subq $5,$3,$3 - cmpult $5,$3,$5 - stq $3,0($16) - addq $16,8,$16 # res_ptr++ - addq $5,$0,$0 # combine carries - bne $18,.Loop - -.Lend2: mulq $2,$19,$3 # $3 = prod_low - ldq $5,0($16) # $5 = *res_ptr - addq $4,$0,$0 # cy_limb = cy_limb + 'cy' - umulh $2,$19,$4 # $4 = cy_limb - addq $3,$0,$3 # $3 = cy_limb + prod_low - cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) - subq $5,$3,$3 - cmpult $5,$3,$5 - stq $3,0($16) - addq $5,$0,$0 # combine carries - addq $4,$0,$0 # cy_limb = prod_high + cy - ret $31,($26),1 -.Lend1: subq $5,$3,$3 - cmpult $5,$3,$5 - stq $3,0($16) - addq $0,$5,$0 - ret $31,($26),1 - - .end __mpn_submul_1 diff --git a/sysdeps/alpha/udiv_qrnnd.S b/sysdeps/alpha/udiv_qrnnd.S deleted file mode 100644 index d4ca795aae..0000000000 --- a/sysdeps/alpha/udiv_qrnnd.S +++ /dev/null @@ -1,161 +0,0 @@ - # Alpha 21064 __udiv_qrnnd - - # Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP 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 Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP 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 <sysdep.h> - - .set noreorder - .set noat - - .text - -LEAF(__udiv_qrnnd, 0) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - -#define cnt $2 -#define tmp $3 -#define rem_ptr $16 -#define n1 $17 -#define n0 $18 -#define d $19 -#define qb $20 - - ldiq cnt,16 - blt d,$largedivisor - -$loop1: cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule d,n1,qb - subq n1,d,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule d,n1,qb - subq n1,d,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule d,n1,qb - subq n1,d,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule d,n1,qb - subq n1,d,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - subq cnt,1,cnt - bgt cnt,$loop1 - stq n1,0(rem_ptr) - bis $31,n0,$0 - ret $31,($26),1 - -$largedivisor: - and n0,1,$4 - - srl n0,1,n0 - sll n1,63,tmp - or tmp,n0,n0 - srl n1,1,n1 - - and d,1,$6 - srl d,1,$5 - addq $5,$6,$5 - -$loop2: cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule $5,n1,qb - subq n1,$5,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule $5,n1,qb - subq n1,$5,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule $5,n1,qb - subq n1,$5,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule $5,n1,qb - subq n1,$5,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - subq cnt,1,cnt - bgt cnt,$loop2 - - addq n1,n1,n1 - addq $4,n1,n1 - bne $6,$Odd - stq n1,0(rem_ptr) - bis $31,n0,$0 - ret $31,($26),1 - -$Odd: - /* q' in n0. r' in n1 */ - addq n1,n0,n1 - - cmpult n1,n0,tmp # tmp := carry from addq - subq n1,d,AT - addq n0,tmp,n0 - cmovne tmp,AT,n1 - - cmpult n1,d,tmp - addq n0,1,AT - cmoveq tmp,AT,n0 - subq n1,d,AT - cmoveq tmp,AT,n1 - - stq n1,0(rem_ptr) - bis $31,n0,$0 - ret $31,($26),1 - - .end __udiv_qrnnd diff --git a/sysdeps/mach/alpha/machine-lock.h b/sysdeps/mach/alpha/machine-lock.h deleted file mode 100644 index bd27d2a51f..0000000000 --- a/sysdeps/mach/alpha/machine-lock.h +++ /dev/null @@ -1,80 +0,0 @@ -/* Machine-specific definition for spin locks. Alpha version. - Copyright (C) 1994, 1997, 2007 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _MACHINE_LOCK_H -#define _MACHINE_LOCK_H - -/* The type of a spin lock variable. */ - -typedef __volatile long int __spin_lock_t; - -/* Value to initialize `__spin_lock_t' variables to. */ - -#define __SPIN_LOCK_INITIALIZER 0L - - -#ifndef _EXTERN_INLINE -#define _EXTERN_INLINE __extern_inline -#endif - -/* Unlock LOCK. */ - -_EXTERN_INLINE void -__spin_unlock (__spin_lock_t *__lock) -{ - __asm__ __volatile__ ("mb; stq $31, %0; mb" - : "=m" (__lock)); -} - -/* Try to lock LOCK; return nonzero if we locked it, zero if another has. */ - -_EXTERN_INLINE int -__spin_try_lock (register __spin_lock_t *__lock) -{ - register long int __rtn, __tmp; - - do - { - __asm__ __volatile__ ("mb; ldq_l %0,%1" /* Load lock value into TMP. */ - : "=r" (__tmp) : "m" (*__lock)); - __rtn = 2; /* Load locked value into RTN. */ - if (__tmp) - /* The lock is already taken. */ - return 0; - - /* The lock is not taken; try to get it now. */ - __asm__ __volatile__ ("stq_c %0,%1" - : "=r" (__rtn), "=m" (*__lock) - : "0" (__rtn), "1" (*__lock)); - /* RTN is clear if stq_c was interrupted; loop to try the lock again. */ - } while (! __rtn); - /* RTN is now nonzero; we have the lock. */ - return __rtn; -} - -/* Return nonzero if LOCK is locked. */ - -_EXTERN_INLINE int -__spin_lock_locked (__spin_lock_t *__lock) -{ - return *__lock != 0; -} - - -#endif /* machine-lock.h */ diff --git a/sysdeps/mach/alpha/machine-sp.h b/sysdeps/mach/alpha/machine-sp.h deleted file mode 100644 index e6df63c9ac..0000000000 --- a/sysdeps/mach/alpha/machine-sp.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Machine-specific function to return the stack pointer. Alpha version. - Copyright (C) 1994, 1997, 2007 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _MACHINE_SP_H -#define _MACHINE_SP_H - -/* Return the current stack pointer. */ - -#ifndef _EXTERN_INLINE -#define _EXTERN_INLINE __extern_inline -#endif - -_EXTERN_INLINE void * -__thread_stack_pointer (void) -{ - register void *__sp__ __asm__ ("$30"); - return __sp__; -} - -#endif /* machine-sp.h */ diff --git a/sysdeps/mach/alpha/setfpucw.c b/sysdeps/mach/alpha/setfpucw.c deleted file mode 100644 index a2887c8dfb..0000000000 --- a/sysdeps/mach/alpha/setfpucw.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Set FP exception mask and rounding mode. Mach/Alpha version. - Copyright (C) 2002 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fpu_control.h> - - -#define FPCR_DYN_SHIFT 58 /* first dynamic rounding mode bit */ -#define FPCR_DYN_CHOPPED (0x0UL << FPCR_DYN_SHIFT) /* towards 0 */ -#define FPCR_DYN_MINUS (0x1UL << FPCR_DYN_SHIFT) /* towards -INF */ -#define FPCR_DYN_NORMAL (0x2UL << FPCR_DYN_SHIFT) /* towards nearest */ -#define FPCR_DYN_PLUS (0x3UL << FPCR_DYN_SHIFT) /* towards +INF */ -#define FPCR_DYN_MASK (0x3UL << FPCR_DYN_SHIFT) - -static inline unsigned long -rdfpcr (void) -{ - unsigned long fpcr; - asm ("excb; mf_fpcr %0" : "=f"(fpcr)); - return fpcr; -} - -static inline void -wrfpcr (unsigned long fpcr) -{ - asm volatile ("mt_fpcr %0; excb" : : "f"(fpcr)); -} - - -void -__setfpucw (fpu_control_t fpu_control) -{ - unsigned long fpcr; - - if (!fpu_control) - fpu_control = _FPU_DEFAULT; - - /* first, set dynamic rounding mode: */ - - fpcr = rdfpcr(); - fpcr &= ~FPCR_DYN_MASK; - switch (fpu_control & 0xc00) - { - case _FPU_RC_NEAREST: fpcr |= FPCR_DYN_NORMAL; break; - case _FPU_RC_DOWN: fpcr |= FPCR_DYN_MINUS; break; - case _FPU_RC_UP: fpcr |= FPCR_DYN_PLUS; break; - case _FPU_RC_ZERO: fpcr |= FPCR_DYN_CHOPPED; break; - } - wrfpcr(fpcr); - - /* XXX trap bits? */ - - __fpu_control = fpu_control; /* update global copy */ -} diff --git a/sysdeps/mach/alpha/syscall.S b/sysdeps/mach/alpha/syscall.S deleted file mode 100644 index 15fc5b75b7..0000000000 --- a/sysdeps/mach/alpha/syscall.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1994,97,2002 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> - -ENTRY (syscall) - mov a0, v0 /* Load system call number from first arg. */ - mov a1, a0 - mov a2, a1 - mov a3, a2 - mov a4, a3 - mov a5, a4 - /* Load the remaining possible args (up to 11) from the stack. */ - ldq a5,0(sp) - ldq t0,8(sp) - ldq t1,16(sp) - ldq t2,24(sp) - ldq t3,32(sp) - ldq t4,40(sp) - callsys - ret -END (syscall) diff --git a/sysdeps/mach/alpha/sysdep.h b/sysdeps/mach/alpha/sysdep.h deleted file mode 100644 index 84e21c8d5d..0000000000 --- a/sysdeps/mach/alpha/sysdep.h +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 1994,97,2002 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define MOVE(x,y) mov x, y - -#define LOSE asm volatile ("call_pal 0") /* halt */ - -#define START_MACHDEP \ - asm ("_start: mov $30, $16\n" /* Put initial SP in a0. */ \ - " br $27, 1f\n" /* Load GP from PC. */ \ - "1: ldgp $29, 0($27)\n" \ - " jmp $26, _start0"); /* Jump to _start0; don't return. */ -#define START_ARGS char **sparg -#define SNARF_ARGS(argc, argv, envp) \ - (envp = &(argv = &sparg[1])[(argc = *(int *) sparg) + 1]) - -#define CALL_WITH_SP(fn, sp) \ - ({ register long int __fn = (long int) fn, __sp = (long int) sp; \ - asm volatile ("mov %0,$30; jmp $31, (%1); ldgp $29, 0(%1)" \ - : : "r" (__sp), "r" (__fn)); }) - -#define STACK_GROWTH_DOWN - -#define RETURN_TO(sp, pc, retval) \ - asm volatile ("mov %0,$30; jmp $31, (%1); mov %2,$0" \ - : : "r" (sp), "r" (pc), "r" ((long int) (retval))); - -#define ALIGN 3 -#include <sysdeps/mach/sysdep.h> - -/* Alpha needs the .ent and .frame magic that the generic version lacks. */ -#undef ENTRY -#define ENTRY(name) \ - .globl name; \ - .align 3; \ - .ent name, 0; \ - name##: \ - .frame sp, 0, ra - -#include <mach/alpha/asm.h> -#undef at -#define at 28 -#define AT $28 -#define fp s6 diff --git a/sysdeps/mach/alpha/thread_state.h b/sysdeps/mach/alpha/thread_state.h deleted file mode 100644 index 0c9527bd26..0000000000 --- a/sysdeps/mach/alpha/thread_state.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Mach thread state definitions for machine-independent code. Alpha version. - Copyright (C) 1994, 1997 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <mach/machine/thread_status.h> - -#define MACHINE_THREAD_STATE_FLAVOR ALPHA_THREAD_STATE -#define MACHINE_THREAD_STATE_COUNT ALPHA_THREAD_STATE_COUNT - -#define machine_thread_state alpha_thread_state - -#define PC pc -#define SP r30 -#define SYSRETURN r0 - -struct machine_thread_all_state - { - int set; /* Mask of bits (1 << FLAVOR). */ - struct alpha_thread_state basic; - struct alpha_exc_state exc; - struct alpha_float_state fpu; - }; - -#include <sysdeps/mach/thread_state.h> diff --git a/sysdeps/mach/hurd/alpha/bits/sigcontext.h b/sysdeps/mach/hurd/alpha/bits/sigcontext.h deleted file mode 100644 index 4f13a2c9b2..0000000000 --- a/sysdeps/mach/hurd/alpha/bits/sigcontext.h +++ /dev/null @@ -1,73 +0,0 @@ -/* Machine-dependent signal context structure for GNU Hurd. Alpha version. - Copyright (C) 1994,97,2001 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H -# error "Never use <bits/sigcontext.h> directly; include <signal.h> instead." -#endif - -#ifndef sc_alpha_thread_state - -/* Signal handlers are actually called: - void handler (int sig, int code, struct sigcontext *scp); */ - -/* State of this thread when the signal was taken. */ -struct sigcontext - { - /* These first members are machine-independent. */ - - long int sc_onstack; /* Nonzero if running on sigstack. */ - __sigset_t sc_mask; /* Blocked signals to restore. */ - - /* MiG reply port this thread is using. */ - unsigned long int sc_reply_port; - - /* Port this thread is doing an interruptible RPC on. */ - unsigned long int sc_intr_port; - - /* Error code associated with this signal (interpreted as `error_t'). */ - int sc_error; - - /* All following members are machine-dependent. The rest of this - structure is written to be laid out identically to: - { - struct alpha_thread_state basic; - struct alpha_exc_state exc; - struct alpha_float_state fpu; - } - trampoline.c knows this, so it must be changed if this changes. */ - -#define sc_alpha_thread_state sc_regs /* Beginning of correspondence. */ - long int sc_regs[31]; /* General registers $0..$30. */ - long int sc_pc; /* Program counter. */ - - /* struct alpha_exc_state */ -#define sc_alpha_exc_state sc_badvaddr - unsigned long int sc_badvaddr; - unsigned int sc_cause; /* Machine-level trap code. */ -#define SC_CAUSE_SET_SSTEP 1 - int sc_used_fpa; /* Nonzero if FPU was used. */ - - /* struct alpha_float_state - This is only filled in if sc_used_fpa is nonzero. */ -#define sc_alpha_float_state sc_fpregs - double sc_fpregs[31]; /* Floating point registers $f0..$f30. */ - long int sc_fpcsr; /* Floating point control/status register. */ - }; - -#endif /* sc_alpha_thread_state */ diff --git a/sysdeps/mach/hurd/alpha/exc2signal.c b/sysdeps/mach/hurd/alpha/exc2signal.c deleted file mode 100644 index 5f3fbbbbb1..0000000000 --- a/sysdeps/mach/hurd/alpha/exc2signal.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Translate Mach exception codes into signal numbers. Alpha version. - Copyright (C) 1994,97,2002 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <hurd.h> -#include <hurd/signal.h> -#include <mach/exception.h> - -/* Translate the Mach exception codes, as received in an `exception_raise' RPC, - into a signal number and signal subcode. */ - -void -_hurd_exception2signal (struct hurd_signal_detail *detail, int *signo) -{ - detail->error = 0; - - switch (detail->exc) - { - default: - *signo = SIGIOT; - detail->code = detail->exc; - break; - - case EXC_BAD_ACCESS: - if (detail->exc_code == KERN_PROTECTION_FAILURE) - *signo = SIGSEGV; - else - *signo = SIGBUS; - detail->code = detail->exc_subcode; - detail->error = detail->exc_code; - break; - - case EXC_BAD_INSTRUCTION: - *signo = SIGILL; - detail->code = detail->exc_code; - break; - - case EXC_ARITHMETIC: - *signo = SIGFPE; - detail->code = detail->exc_code; - break; - break; - - case EXC_EMULATION: - /* 3.0 doesn't give this one, why, I don't know. */ - *signo = SIGEMT; - detail->code = detail->exc_code; - break; - - case EXC_SOFTWARE: - *signo = SIGEMT; - detail->code = detail->exc_code; - break; - - case EXC_BREAKPOINT: - *signo = SIGTRAP; - detail->code = detail->exc_code; - break; - } -} diff --git a/sysdeps/mach/hurd/alpha/init-first.c b/sysdeps/mach/hurd/alpha/init-first.c deleted file mode 100644 index 6e55225890..0000000000 --- a/sysdeps/mach/hurd/alpha/init-first.c +++ /dev/null @@ -1,302 +0,0 @@ -/* Initialization code run first thing by the ELF startup code. Alpha/Hurd. - Copyright (C) 1995,96,97,98,99,2000,01,02,03 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <assert.h> -#include <hurd.h> -#include <stdio.h> -#include <unistd.h> -#include <string.h> -#include <sysdep.h> -#include <set-hooks.h> -#include "hurdstartup.h" -#include "hurdmalloc.h" /* XXX */ - -extern void __mach_init (void); -extern void __init_misc (int, char **, char **); -#ifdef USE_NONOPTION_FLAGS -extern void __getopt_clean_environment (char **); -#endif -#ifndef SHARED -extern void _dl_non_dynamic_init (void) internal_function; -#endif -extern void __libc_global_ctors (void); - -unsigned int __hurd_threadvar_max; -unsigned long int __hurd_threadvar_stack_offset; -unsigned long int __hurd_threadvar_stack_mask; - -#ifndef SHARED -int __libc_enable_secure; -#endif -int __libc_multiple_libcs attribute_hidden = 1; - -extern int __libc_argc attribute_hidden; -extern char **__libc_argv attribute_hidden; -extern char **_dl_argv; - -void *(*_cthread_init_routine) (void); /* Returns new SP to use. */ -void (*_cthread_exit_routine) (int status) __attribute__ ((__noreturn__)); - -/* Things that want to be run before _hurd_init or much anything else. - Importantly, these are called before anything tries to use malloc. */ -DEFINE_HOOK (_hurd_preinit_hook, (void)); - - -/* We call this once the Hurd magic is all set up and we are ready to be a - Posixoid program. This does the same things the generic version does. */ -static void -posixland_init (int argc, char **argv, char **envp) -{ - __libc_argc = argc; - __libc_argv = argv; - __environ = envp; - -#ifndef SHARED - _dl_non_dynamic_init (); -#endif - __init_misc (argc, argv, envp); - -#ifdef USE_NONOPTION_FLAGS - /* This is a hack to make the special getopt in GNU libc working. */ - __getopt_clean_environment (envp); -#endif - -#ifdef SHARED - __libc_global_ctors (); -#endif -} - - -static void -init1 (intptr_t *data) -{ - int argc = (intptr_t) *data; - char **argv = (char **) &data[1]; - char **envp = &argv[argc + 1]; - struct hurd_startup_data *d; - - while (*envp) - ++envp; - d = (void *) ++envp; - - /* If we are the bootstrap task started by the kernel, - then after the environment pointers there is no Hurd - data block; the argument strings start there. */ - /* OSF Mach starts the bootstrap task with argc == 0. - XXX This fails if a non-bootstrap task gets started - with argc == 0. */ - if (argc && (void *) d != argv[0]) - { - _hurd_init_dtable = d->dtable; - _hurd_init_dtablesize = d->dtablesize; - - { - /* Check if the stack we are now on is different from - the one described by _hurd_stack_{base,size}. */ - - char dummy; - const vm_address_t newsp = (vm_address_t) &dummy; - - if (d->stack_size != 0 && (newsp < d->stack_base || - newsp - d->stack_base > d->stack_size)) - /* The new stack pointer does not intersect with the - stack the exec server set up for us, so free that stack. */ - __vm_deallocate (__mach_task_self (), d->stack_base, d->stack_size); - } - } - - if ((void *) d != argv[0] && (d->portarray || d->intarray)) - /* Initialize library data structures, start signal processing, etc. */ - _hurd_init (d->flags, argv, - d->portarray, d->portarraysize, - d->intarray, d->intarraysize); - -#ifndef SHARED - __libc_enable_secure = d->flags & EXEC_SECURE; -#endif -} - - -static inline void -init (intptr_t *data) -{ - int argc = *data; - char **argv = (void *) (data + 1); - char **envp = &argv[argc + 1]; - struct hurd_startup_data *d; - unsigned long int threadvars[_HURD_THREADVAR_MAX]; - - /* Provide temporary storage for thread-specific variables on the - startup stack so the cthreads initialization code can use them - for malloc et al, or so we can use malloc below for the real - threadvars array. */ - memset (threadvars, 0, sizeof threadvars); - __hurd_threadvar_stack_offset = (unsigned long int) threadvars; - - /* Since the cthreads initialization code uses malloc, and the - malloc initialization code needs to get at the environment, make - sure we can find it. We'll need to do this again later on since - switching stacks changes the location where the environment is - stored. */ - __environ = envp; - - while (*envp) - ++envp; - d = (void *) ++envp; - - /* The user might have defined a value for this, to get more variables. - Otherwise it will be zero on startup. We must make sure it is set - properly before before cthreads initialization, so cthreads can know - how much space to leave for thread variables. */ - if (__hurd_threadvar_max < _HURD_THREADVAR_MAX) - __hurd_threadvar_max = _HURD_THREADVAR_MAX; - - - /* After possibly switching stacks, call `init1' (above) with the user - code as the return address, and the argument data immediately above - that on the stack. */ - - if (_cthread_init_routine) - { - /* Initialize cthreads, which will allocate us a new stack to run on. */ - void *newsp = (*_cthread_init_routine) (); - struct hurd_startup_data *od; - - void switch_stacks (void); - - /* Copy per-thread variables from that temporary - area onto the new cthread stack. */ - memcpy (__hurd_threadvar_location_from_sp (0, newsp), - threadvars, sizeof threadvars); - - /* Copy the argdata from the old stack to the new one. */ - newsp = memcpy (newsp - ((char *) &d[1] - (char *) data), data, - (char *) d - (char *) data); - -#ifdef SHARED - /* And readjust the dynamic linker's idea of where the argument - vector lives. */ - assert (_dl_argv == argv); - _dl_argv = (void *) ((int *) newsp + 1); -#endif - - /* Set up the Hurd startup data block immediately following - the argument and environment pointers on the new stack. */ - od = (newsp + ((char *) d - (char *) data)); - if ((void *) argv[0] == d) - /* We were started up by the kernel with arguments on the stack. - There is no Hurd startup data, so zero the block. */ - memset (od, 0, sizeof *od); - else - /* Copy the Hurd startup data block to the new stack. */ - *od = *d; - - /* - Force NEWSP into sp and &init1 into pv, then branch to pv (call init1). - */ - asm volatile ("lda $30,0(%0); lda $27,0(%1); jsr $26,($27)" - : : "r" (newsp), "r" (&init1)); - } - else - { - /* We are not using cthreads, so we will have just a single allocated - area for the per-thread variables of the main user thread. */ - unsigned long int *array; - unsigned int i; - - array = malloc (__hurd_threadvar_max * sizeof (unsigned long int)); - if (array == NULL) - __libc_fatal ("Can't allocate single-threaded thread variables."); - - /* Copy per-thread variables from the temporary array into the - newly malloc'd space. */ - memcpy (array, threadvars, sizeof threadvars); - __hurd_threadvar_stack_offset = (unsigned long int) array; - for (i = _HURD_THREADVAR_MAX; i < __hurd_threadvar_max; ++i) - array[i] = 0; - - init1 (data); - } -} - - -/* Do the first essential initializations that must precede all else. */ -static inline void -first_init (void) -{ - /* Initialize data structures so we can do RPCs. */ - __mach_init (); - - RUN_HOOK (_hurd_preinit_hook, ()); -} - -#ifdef SHARED -/* This function is called specially by the dynamic linker to do early - initialization of the shared C library before normal initializers - expecting a Posixoid environment can run. It gets called with the - stack set up just as the user will see it, so it can switch stacks. */ - -void -_dl_init_first (intptr_t argc, ...) -{ - first_init (); - - init (&argc); -} -#endif - - -#ifdef SHARED -/* The regular posixland initialization is what goes into libc's - normal initializer. */ -/* NOTE! The linker notices the magical name `_init' and sets the DT_INIT - pointer in the dynamic section based solely on that. It is convention - for this function to be in the `.init' section, but the symbol name is - the only thing that really matters!! */ -strong_alias (posixland_init, _init); - -void -__libc_init_first (int argc, char **argv, char **envp) -{ - /* Everything was done in the shared library initializer, _init. */ -} -#else -strong_alias (posixland_init, __libc_init_first); - - -void -_hurd_stack_setup (volatile intptr_t argc, ...) -{ - first_init (); - - _hurd_startup ((void **) &argc, &init); -} -#endif - - -/* This function is defined here so that if this file ever gets into - ld.so we will get a link error. Having this file silently included - in ld.so causes disaster, because the _init definition above will - cause ld.so to gain an init function, which is not a cool thing. */ - -void -_dl_start (void) -{ - abort (); -} diff --git a/sysdeps/mach/hurd/alpha/intr-msg.h b/sysdeps/mach/hurd/alpha/intr-msg.h deleted file mode 100644 index 4f172124e3..0000000000 --- a/sysdeps/mach/hurd/alpha/intr-msg.h +++ /dev/null @@ -1,100 +0,0 @@ -/* Machine-dependent details of interruptible RPC messaging. Alpha version. - Copyright (C) 2002 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define INTR_MSG_TRAP(msg, option, send_size, rcv_size, rcv_name, timeout, notify) \ -({ \ - error_t err; \ - asm (".globl _hurd_intr_rpc_msg_do_trap\n" \ - ".globl _hurd_intr_rpc_msg_in_trap\n" \ - " mov %1, $16\n" \ - " mov %2, $17\n" \ - " mov %3, $18\n" \ - " mov %4, $19\n" \ - " mov %5, $20\n" \ - " mov %6, $21\n" \ - " mov %7, $1\n" \ - " lda $0, -25\n" \ - "_hurd_intr_rpc_msg_do_trap: callsys\n" \ - "_hurd_intr_rpc_msg_in_trap: ret\n" \ - : "=r" (err) \ - : "r" (msg), "r" (option), "r" (send_size), "r" (rcv_size), \ - "r" (rcv_name), "r" (timeout), "r" (notify) \ - : "16", "17", "18", "19", "20", "21", "1", "0"); \ - err; \ -}) - -static void inline -INTR_MSG_BACK_OUT (struct alpha_thread_state *state) -{ - return; -} - -#include "hurdfault.h" - -/* This cannot be an inline function because it calls setjmp. */ -#define SYSCALL_EXAMINE(state, callno) \ -({ \ - u_int32_t *p = (void *) ((state)->pc - 4); \ - int result; \ - _hurdsig_catch_memory_fault (p) ? 0 : \ - ({ \ - result = (*p == 0x00000083); \ - _hurdsig_end_catch_fault (); \ - if (result) \ - /* The PC is just after a `callsys' instruction. \ - This is a system call in progress; v0 holds the call number. */ \ - *(callno) = (state)->r0; \ - result; \ - }); \ -}) - -struct mach_msg_trap_args - { - /* This is the order of arguments to mach_msg_trap. */ - mach_msg_header_t *msg; - mach_msg_option_t option; - mach_msg_size_t send_size; - mach_msg_size_t rcv_size; - mach_port_t rcv_name; - mach_msg_timeout_t timeout; - mach_port_t notify; - }; - -/* This cannot be an inline function because it calls setjmp. */ -#define MSG_EXAMINE(state, msgid, rcv_name, send_name, option, timeout) \ -({ \ - mach_msg_header_t *msg = (mach_msg_header_t *) (state)->r16; \ - *(option) = (mach_msg_option_t) (state)->r17; \ - *(rcv_name) = (mach_port_t) (state)->r18; \ - *(timeout) = (mach_msg_timeout_t) (state)->r19; \ - (msg == 0) ? \ - ({ \ - *(send_name) = MACH_PORT_NULL; \ - *(msgid) = 0; \ - 0; \ - }) : \ - (_hurdsig_catch_memory_fault (msg) ? -1 : \ - ({ \ - *(send_name) = msg->msgh_remote_port; \ - *(msgid) = msg->msgh_id; \ - _hurdsig_end_catch_fault (); \ - 0; \ - }) \ - ); \ -}) diff --git a/sysdeps/mach/hurd/alpha/longjmp-ts.c b/sysdeps/mach/hurd/alpha/longjmp-ts.c deleted file mode 100644 index f472dbcb30..0000000000 --- a/sysdeps/mach/hurd/alpha/longjmp-ts.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Perform a `longjmp' on a Mach thread_state. Alpha version. - Copyright (C) 2002, 2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <hurd/signal.h> -#include <setjmp.h> -#include <jmpbuf-offsets.h> -#include <mach/thread_status.h> - - -/* Set up STATE to do the equivalent of `longjmp (ENV, VAL);'. */ - -void -_hurd_longjmp_thread_state (void *state, jmp_buf env, int val) -{ - struct alpha_thread_state *const ts = state; - - ts->r9 = env[0].__jmpbuf[JB_S0]; - ts->r10 = env[0].__jmpbuf[JB_S1]; - ts->r11 = env[0].__jmpbuf[JB_S2]; - ts->r12 = env[0].__jmpbuf[JB_S3]; - ts->r13 = env[0].__jmpbuf[JB_S4]; - ts->r13 = env[0].__jmpbuf[JB_S5]; - ts->pc = env[0].__jmpbuf[JB_PC]; - ts->r15 = env[0].__jmpbuf[JB_FP]; - ts->r30 = env[0].__jmpbuf[JB_SP]; - ts->r0 = val ?: 1; - - /* XXX - To mimic longjmp we ought to restore some fp registers too. - But those registers are in struct alpha_float_state. - The only use of this is in fork, and it probably won't matter. - */ -} diff --git a/sysdeps/mach/hurd/alpha/sigreturn.c b/sysdeps/mach/hurd/alpha/sigreturn.c deleted file mode 100644 index 182d4cbd84..0000000000 --- a/sysdeps/mach/hurd/alpha/sigreturn.c +++ /dev/null @@ -1,211 +0,0 @@ -/* Return from signal handler in GNU C library for Hurd. Alpha version. - Copyright (C) 1994,95,97,98,2002 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <hurd.h> -#include <hurd/signal.h> -#include <hurd/threadvar.h> -#include <hurd/msg.h> -#include <stdlib.h> -#include <string.h> - -int -__sigreturn (struct sigcontext *scp) -{ - struct hurd_sigstate *ss; - mach_port_t *reply_port; - - if (scp == NULL || (scp->sc_mask & _SIG_CANT_MASK)) - { - errno = EINVAL; - return -1; - } - - ss = _hurd_self_sigstate (); - __spin_lock (&ss->lock); - - /* Restore the set of blocked signals, and the intr_port slot. */ - ss->blocked = scp->sc_mask; - ss->intr_port = scp->sc_intr_port; - - /* Check for pending signals that were blocked by the old set. */ - if (ss->pending & ~ss->blocked) - { - /* There are pending signals that just became unblocked. Wake up the - signal thread to deliver them. But first, squirrel away SCP where - the signal thread will notice it if it runs another handler, and - arrange to have us called over again in the new reality. */ - ss->context = scp; - /* Clear the intr_port slot, since we are not in fact doing - an interruptible RPC right now. If SS->intr_port is not null, - the SCP context is doing an interruptible RPC, but the signal - thread will examine us while we are blocked in the sig_post RPC. */ - ss->intr_port = MACH_PORT_NULL; - __spin_unlock (&ss->lock); - __msg_sig_post (_hurd_msgport, 0, 0, __mach_task_self ()); - /* If a pending signal was handled, sig_post never returned. */ - __spin_lock (&ss->lock); - } - - if (scp->sc_onstack) - { - ss->sigaltstack.ss_flags &= ~SS_ONSTACK; /* XXX threadvars */ - /* XXX cannot unlock until off sigstack */ - abort (); - } - else - __spin_unlock (&ss->lock); - - /* Destroy the MiG reply port used by the signal handler, and restore the - reply port in use by the thread when interrupted. */ - reply_port = - (mach_port_t *) __hurd_threadvar_location (_HURD_THREADVAR_MIG_REPLY); - if (*reply_port) - __mach_port_destroy (__mach_task_self (), *reply_port); - *reply_port = scp->sc_reply_port; - - if (scp->sc_used_fpa) - { - /* Restore FPU state. */ - - /* Restore the floating-point control/status register. - We must do this first because the compiler will need - a temporary FP register for the load. */ - asm volatile ("mt_fpcr %0" : : "f" (scp->sc_fpcsr)); - - /* Restore floating-point registers. */ -#define restore_fpr(n) \ - asm volatile ("ldt $f" #n ",%0" : : "m" (scp->sc_fpregs[n])) - restore_fpr (0); - restore_fpr (1); - restore_fpr (2); - restore_fpr (3); - restore_fpr (4); - restore_fpr (5); - restore_fpr (6); - restore_fpr (7); - restore_fpr (8); - restore_fpr (9); - restore_fpr (10); - restore_fpr (11); - restore_fpr (12); - restore_fpr (13); - restore_fpr (14); - restore_fpr (15); - restore_fpr (16); - restore_fpr (17); - restore_fpr (18); - restore_fpr (19); - restore_fpr (20); - restore_fpr (21); - restore_fpr (22); - restore_fpr (23); - restore_fpr (24); - restore_fpr (25); - restore_fpr (26); - restore_fpr (27); - restore_fpr (28); - restore_fpr (29); - restore_fpr (30); - } - - /* Load all the registers from the sigcontext. */ -#define restore_gpr(n) \ - asm volatile ("ldq $" #n ",%0" : : "m" (scpreg->sc_regs[n])) - - { - /* The `rei' PAL pseudo-instruction restores registers $2..$7, the PC - and processor status. So we can use these few registers for our - working variables. Unfortunately, it finds its data on the stack - and merely pops the SP ($30) over the words of state restored, - allowing no other option for the new SP value. So we must push the - registers and PSW it will to restore, onto the user's stack and let - it pop them from there. */ - register const struct sigcontext *const scpreg asm ("$2") = scp; - register integer_t *usp asm ("$3") = (integer_t *) scpreg->sc_regs[30]; - register integer_t usp_align asm ("$4"); - - /* Push an 8-word "trap frame" onto the user stack for `rei': - registers $2..$7, the PC, and the PSW. */ - - register struct rei_frame - { - integer_t regs[5], pc, ps; - } *rei_frame asm ("$5"); - - usp -= 8; - /* `rei' demands that the stack be aligned to a 64 byte (8 word) - boundary; bits 61..56 of the PSW are OR'd back into the SP value - after popping the 8-word trap frame, so we store (sp % 64) - there and this restores the original user SP. */ - usp_align = (integer_t) usp & 63L; - rei_frame = (void *) ((integer_t) usp & ~63L); - - /* Copy the registers and PC from the sigcontext. */ - memcpy (rei_frame->regs, &scpreg->sc_regs[2], sizeof rei_frame->regs); - rei_frame->pc = scpreg->sc_pc; - - /* Compute the new PS value to be restored. `rei' adds the value at - bits 61..56 to the SP to compensate for the alignment above that - cleared the low 6 bits; bits 5..3 are the new mode/privilege level - (must be >= current mode; 3 == user mode); bits 2..0 are "software", - unused by the processor or kernel (XXX should trampoline save these? - How?); in user mode, `rei' demands that all other bits be zero. */ - rei_frame->ps = (usp_align << 56) | (3 << 3); /* XXX low 3 bits??? */ - - /* Restore the other general registers: everything except $2..$7, which - are in the `rei' trap frame we set up above, and $30, which is the - SP which is popped by `rei'. */ - restore_gpr (1); - restore_gpr (8); - restore_gpr (9); - restore_gpr (10); - restore_gpr (11); - restore_gpr (12); - restore_gpr (13); - restore_gpr (14); - restore_gpr (15); - restore_gpr (16); - restore_gpr (17); - restore_gpr (18); - restore_gpr (19); - restore_gpr (20); - restore_gpr (21); - restore_gpr (22); - restore_gpr (23); - restore_gpr (24); - restore_gpr (25); - restore_gpr (26); - restore_gpr (27); - restore_gpr (28); - restore_gpr (29); - - /* Switch the stack pointer to the trap frame set up on - the user stack and do the magical `rei' PAL call. */ - asm volatile ("mov %0, $30\n" - "call_pal %1" - : : "r" (rei_frame), "i" (63)); /* PAL_rti */ - /* Firewall. */ - asm volatile ("halt"); - } - - /* NOTREACHED */ - return -1; -} - -weak_alias (__sigreturn, sigreturn) diff --git a/sysdeps/mach/hurd/alpha/static-start.S b/sysdeps/mach/hurd/alpha/static-start.S deleted file mode 100644 index a31d0d097a..0000000000 --- a/sysdeps/mach/hurd/alpha/static-start.S +++ /dev/null @@ -1,30 +0,0 @@ -/* Startup code for statically linked Hurd/Alpha binaries. - Copyright (C) 2002 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> - - .text - .align 3 - .globl _start - .type _start,@function -_start: - jsr ra, _hurd_stack_setup - -#define _start _start1 -#include <sysdeps/alpha/elf/start.S> diff --git a/sysdeps/mach/hurd/alpha/trampoline.c b/sysdeps/mach/hurd/alpha/trampoline.c deleted file mode 100644 index 2360cbb469..0000000000 --- a/sysdeps/mach/hurd/alpha/trampoline.c +++ /dev/null @@ -1,249 +0,0 @@ -/* Set thread_state for sighandler, and sigcontext to recover. Alpha version. - Copyright (C) 1994,95,97,98,2002 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <hurd/signal.h> -#include "thread_state.h" -#include "hurdfault.h" -#include <assert.h> - -struct mach_msg_trap_args - { - /* This is the order of arguments to mach_msg_trap. */ - mach_msg_header_t *msg; - mach_msg_option_t option; - mach_msg_size_t send_size; - mach_msg_size_t rcv_size; - mach_port_t rcv_name; - mach_msg_timeout_t timeout; - mach_port_t notify; - }; - - -struct sigcontext * -_hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler, - int signo, struct hurd_signal_detail *detail, - int rpc_wait, struct machine_thread_all_state *state) -{ - __label__ trampoline, rpc_wait_trampoline; - void *sigsp; - struct sigcontext *scp; - - if (ss->context) - { - /* We have a previous sigcontext that sigreturn was about - to restore when another signal arrived. We will just base - our setup on that. */ - if (! _hurdsig_catch_memory_fault (ss->context)) - { - memcpy (&state->basic, &ss->context->sc_alpha_thread_state, - sizeof (state->basic)); - memcpy (&state->exc, &ss->context->sc_alpha_exc_state, - sizeof (state->exc)); - state->set = (1 << ALPHA_THREAD_STATE) | (1 << ALPHA_EXC_STATE); - if (state->exc.used_fpa) - { - memcpy (&state->fpu, &ss->context->sc_alpha_float_state, - sizeof (state->fpu)); - state->set |= (1 << ALPHA_FLOAT_STATE); - } - assert (! rpc_wait); - /* The intr_port slot was cleared before sigreturn sent us the - sig_post that made us notice this pending signal, so - _hurd_internal_post_signal wouldn't do interrupt_operation. - After we return, our caller will set SCP->sc_intr_port (in the - new context) from SS->intr_port and clear SS->intr_port. Now - that we are restoring this old context recorded by sigreturn, - we want to restore its intr_port too; so store it in - SS->intr_port now, so it will end up in SCP->sc_intr_port - later. */ - ss->intr_port = ss->context->sc_intr_port; - } - _hurdsig_end_catch_fault (); - - /* If the sigreturn context was bogus, just ignore it. */ - ss->context = NULL; - } - else if (! machine_get_basic_state (ss->thread, state)) - return NULL; - - if ((ss->actions[signo].sa_flags & SA_ONSTACK) && - !(ss->sigaltstack.ss_flags & (SS_DISABLE|SS_ONSTACK))) - { - sigsp = ss->sigaltstack.ss_sp + ss->sigaltstack.ss_size; - ss->sigaltstack.ss_flags |= SS_ONSTACK; - /* XXX need to set up base of new stack for - per-thread variables, cthreads. */ - } - else - sigsp = (char *) state->basic.SP; - - /* Set up the sigcontext structure on the stack. This is all the stack - needs, since the args are passed in registers (below). */ - sigsp -= sizeof (*scp); - scp = sigsp; - - if (_hurdsig_catch_memory_fault (scp)) - { - /* We got a fault trying to write the stack frame. - We cannot set up the signal handler. - Returning NULL tells our caller, who will nuke us with a SIGILL. */ - return NULL; - } - else - { - /* Set up the sigcontext from the current state of the thread. */ - - scp->sc_onstack = ss->sigaltstack.ss_flags & SS_ONSTACK ? 1 : 0; - - /* struct sigcontext is laid out so that starting at sc_regs - mimics a struct alpha_thread_state. */ - memcpy (&scp->sc_alpha_thread_state, - &state->basic, sizeof (state->basic)); - - /* struct sigcontext is laid out so that starting at sc_badvaddr - mimics a struct mips_exc_state. */ - if (! machine_get_state (ss->thread, state, ALPHA_EXC_STATE, - &state->exc, &scp->sc_alpha_exc_state, - sizeof (state->exc))) - return NULL; - - if (state->exc.used_fpa && - /* struct sigcontext is laid out so that starting at sc_fpregs - mimics a struct alpha_float_state. This state - is only meaningful if the coprocessor was used. */ - ! machine_get_state (ss->thread, state, ALPHA_FLOAT_STATE, - &state->fpu, - &scp->sc_alpha_float_state, - sizeof (state->fpu))) - return NULL; - - _hurdsig_end_catch_fault (); - } - - /* Modify the thread state to call the trampoline code on the new stack. */ - if (rpc_wait) - { - /* The signalee thread was blocked in a mach_msg_trap system call, - still waiting for a reply. We will have it run the special - trampoline code which retries the message receive before running - the signal handler. - - To do this we change the OPTION argument in its registers to - enable only message reception, since the request message has - already been sent. */ - - /* The system call arguments are stored in consecutive registers - starting with a0 ($16). */ - struct mach_msg_trap_args *args = (void *) &state->basic.r16; - - assert (args->option & MACH_RCV_MSG); - /* Disable the message-send, since it has already completed. The - calls we retry need only wait to receive the reply message. */ - args->option &= ~MACH_SEND_MSG; - - /* Limit the time to receive the reply message, in case the server - claimed that `interrupt_operation' succeeded but in fact the RPC - is hung. */ - args->option |= MACH_RCV_TIMEOUT; - args->timeout = _hurd_interrupted_rpc_timeout; - - state->basic.pc = (long int) &&rpc_wait_trampoline; - /* After doing the message receive, the trampoline code will need to - update the v0 ($0) value to be restored by sigreturn. To simplify - the assembly code, we pass the address of its slot in SCP to the - trampoline code in at ($28). */ - state->basic.r28 = (long int) &scp->sc_regs[0]; - /* We must preserve the mach_msg_trap args in a0..a5 and t0 - ($16..$21, $1). Pass the handler args to the trampoline code in - t8..t10 ($22.$24). */ - state->basic.r22 = signo; - state->basic.r23 = detail->code; - state->basic.r24 = (long int) scp; - } - else - { - state->basic.pc = (long int) &&trampoline; - state->basic.r16 = signo; - state->basic.r17 = detail->code; - state->basic.r18 = (long int) scp; - } - - state->basic.r30 = (long int) sigsp; /* $30 is the stack pointer. */ - - /* We pass the handler function to the trampoline code in ra ($26). */ - state->basic.r26 = (long int) handler; - /* In the callee-saved register t12/pv ($27), we store the - address of __sigreturn itself, for the trampoline code to use. */ - state->basic.r27 = (long int) &__sigreturn; - /* In the callee-saved register t11/ai ($25), we save the SCP value to pass - to __sigreturn after the handler returns. */ - state->basic.r25 = (long int) scp; - - return scp; - - /* The trampoline code follows. This is not actually executed as part of - this function, it is just convenient to write it that way. */ - - rpc_wait_trampoline: - /* This is the entry point when we have an RPC reply message to receive - before running the handler. The MACH_MSG_SEND bit has already been - cleared in the OPTION argument in our registers. For our convenience, - at ($28) points to the sc_regs[0] member of the sigcontext (saved v0 - ($0)). */ - asm volatile - (/* Retry the interrupted mach_msg system call. */ - "lda $0, -25($31)\n" /* mach_msg_trap */ - "callsys\n" /* Magic system call instruction. */ - /* When the sigcontext was saved, v0 was MACH_RCV_INTERRUPTED. But - now the message receive has completed and the original caller of - the RPC (i.e. the code running when the signal arrived) needs to - see the final return value of the message receive in v0. So - store the new v0 value into the sc_regs[0] member of the sigcontext - (whose address is in at to make this code simpler). */ - "stq $0, 0($28)\n" - /* Since the argument registers needed to have the mach_msg_trap - arguments, we've stored the arguments to the handler function - in registers t8..t10 ($22..$24). */ - "mov $22, $16\n" - "mov $23, $17\n" - "mov $24, $18\n"); - - trampoline: - /* Entry point for running the handler normally. The arguments to the - handler function are already in the standard registers: - - a0 SIGNO - a1 SIGCODE - a2 SCP - - t12 also contains SCP; this value is callee-saved (and so should not get - clobbered by running the handler). We use this saved value to pass to - __sigreturn, so the handler can clobber the argument registers if it - likes. */ - /* Call the handler function, saving return address in ra ($26). */ - asm volatile ("jsr $26, ($26)"); - /* Reset gp ($29) from the return address (here) in ra ($26). */ - asm volatile ("ldgp $29, 0($26)"); - asm volatile ("mov $25, $16"); /* Move saved SCP to argument register. */ - /* Call __sigreturn (SCP); this cannot return. */ - asm volatile ("jmp $31, ($27)"); - - /* NOTREACHED */ - return NULL; -} diff --git a/sysdeps/unix/alpha/Makefile b/sysdeps/unix/alpha/Makefile deleted file mode 100644 index 441aa02a83..0000000000 --- a/sysdeps/unix/alpha/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),rt) -librt-sysdep_routines += rt-sysdep -endif diff --git a/sysdeps/unix/alpha/pipe.S b/sysdeps/unix/alpha/pipe.S deleted file mode 100644 index 2da4d78abd..0000000000 --- a/sysdeps/unix/alpha/pipe.S +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 1993, 1995, 1997, 2002 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger (davidm@cs.arizona.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* __pipe is a special syscall since it returns two values. */ - -#include <sysdep.h> - -PSEUDO (__pipe, pipe, 0) - stl r0, 0(a0) - stl r1, 4(a0) - mov zero, v0 - ret -PSEUDO_END(__pipe) - -libc_hidden_def (__pipe) -weak_alias (__pipe, pipe) diff --git a/sysdeps/unix/alpha/rt-sysdep.S b/sysdeps/unix/alpha/rt-sysdep.S deleted file mode 100644 index f966bf1e59..0000000000 --- a/sysdeps/unix/alpha/rt-sysdep.S +++ /dev/null @@ -1 +0,0 @@ -#include <sysdep.S> diff --git a/sysdeps/unix/alpha/sysdep.S b/sysdeps/unix/alpha/sysdep.S deleted file mode 100644 index c67a6542f6..0000000000 --- a/sysdeps/unix/alpha/sysdep.S +++ /dev/null @@ -1,135 +0,0 @@ -/* Copyright (C) 1993, 1996, 1998, 2002, 2003, 2004 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Brendan Kehoe (brendan@zen.org). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#include <features.h> - -#if defined(__ELF__) && defined(PIC) - /* Put this at the end of libc's text segment so that all of - the direct branches from the syscalls are forward, and - thus predicted not taken. */ - .section .text.last, "ax", @progbits -#else - .text -#endif - -#ifdef PIC - /* When building a shared library, we branch here without - having loaded the GP. Nor, since it was a direct branch, - have we loaded PV with our address. Do both. */ -# define LOADGP br pv, 1f; 1: ldgp gp, 0(pv) -# define PROLOGUE .prologue 0 -# define EPILOGUE -#else - /* When building the static library, we tail call here from - elsewhere, which might use a different GP. The entertaining - part is that we have to return with the GP of our caller - in place, so that linker relaxation works properly. */ - /* ??? This is so ugly. Consider always putting the errno - setting code with the syscall in the static case. */ -# define GPSAVEREG t10 -# define LOADGP ldah t11, 0(pv) !gpdisp!1; \ - br 1f; \ - .subsection 2; \ - 1: mov gp, GPSAVEREG; \ - lda gp, 0(t11) !gpdisp!1; \ - br 2f; \ - .previous; \ - mov gp, GPSAVEREG; \ - 2: -# define PROLOGUE .prologue 1 -# define EPILOGUE mov GPSAVEREG, gp -#endif - - .align 4 - .globl __syscall_error - .ent __syscall_error -__syscall_error: - -#if defined(_LIBC_REENTRANT) && USE___THREAD - -#ifndef NOT_IN_libc -# define SYSCALL_ERROR_ERRNO __libc_errno -#else -# define SYSCALL_ERROR_ERRNO errno -#endif - - LOADGP - PROLOGUE - mov v0, t0 - call_pal PAL_rduniq - ldq t1, SYSCALL_ERROR_ERRNO(gp) !gottprel - addq v0, t1, v0 - stl t0, 0(v0) - lda v0, -1 - EPILOGUE - ret - -#elif defined(_LIBC_REENTRANT) - - LOADGP - lda sp, -32(sp) - .frame sp, 32, ra, 0 - stq ra, 0(sp) - stq v0, 8(sp) -#ifdef GPSAVEREG - stq GPSAVEREG, 16(sp) -#endif - .mask 0x4000001, -32 - PROLOGUE - - /* Find our per-thread errno address */ -#if defined PIC && !defined IS_IN_librt - bsr ra, __errno_location !samegp -#else - jsr ra, __errno_location -#ifndef GPSAVEREG - ldgp gp, 0(ra) -#endif -#endif - - /* Store the error value. */ - ldq t0, 8(sp) - stl t0, 0(v0) - - /* And kick back a -1. */ - ldi v0, -1 - -#ifdef GPSAVEREG - ldq GPSAVEREG, 16(sp) -#endif - ldq ra, 0(sp) - lda sp, 32(sp) - EPILOGUE - ret - -#else - - LOADGP - PROLOGUE - stl v0, errno - lda v0, -1 - EPILOGUE - ret - -#endif - - .subsection 3 - .end __syscall_error diff --git a/sysdeps/unix/alpha/sysdep.h b/sysdeps/unix/alpha/sysdep.h deleted file mode 100644 index 2e5bc798eb..0000000000 --- a/sysdeps/unix/alpha/sysdep.h +++ /dev/null @@ -1,438 +0,0 @@ -/* Copyright (C) 1992, 1995, 1996, 2000, 2003, 2004, 2006 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Brendan Kehoe (brendan@zen.org). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdeps/unix/sysdep.h> - -#ifdef __ASSEMBLER__ - -#ifdef __linux__ -# include <alpha/regdef.h> -#else -# include <regdef.h> -#endif - -#include <tls.h> /* Defines USE___THREAD. */ - -#ifdef IS_IN_rtld -# include <dl-sysdep.h> /* Defines RTLD_PRIVATE_ERRNO. */ -#endif - - -#ifdef __STDC__ -#define __LABEL(x) x##: -#else -#define __LABEL(x) x/**/: -#endif - -#define LEAF(name, framesize) \ - .globl name; \ - .align 4; \ - .ent name, 0; \ - __LABEL(name) \ - .frame sp, framesize, ra - -#define ENTRY(name) \ - .globl name; \ - .align 4; \ - .ent name, 0; \ - __LABEL(name) \ - .frame sp, 0, ra - -/* Mark the end of function SYM. */ -#undef END -#define END(sym) .end sym - -#ifdef PROF -# define PSEUDO_PROLOGUE \ - .frame sp, 0, ra; \ - ldgp gp,0(pv); \ - .set noat; \ - lda AT,_mcount; \ - jsr AT,(AT),_mcount; \ - .set at; \ - .prologue 1 -#elif defined PIC -# define PSEUDO_PROLOGUE \ - .frame sp, 0, ra; \ - .prologue 0 -#else -# define PSEUDO_PROLOGUE \ - .frame sp, 0, ra; \ - ldgp gp,0(pv); \ - .prologue 1 -#endif /* PROF */ - -#if RTLD_PRIVATE_ERRNO -# define SYSCALL_ERROR_LABEL $syscall_error -# define SYSCALL_ERROR_HANDLER \ - stl v0, rtld_errno(gp) !gprel; \ - lda v0, -1; \ - ret -#elif defined(PIC) -# define SYSCALL_ERROR_LABEL __syscall_error -# define SYSCALL_ERROR_HANDLER \ - br $31, __syscall_error !samegp -#else -# define SYSCALL_ERROR_LABEL $syscall_error -# define SYSCALL_ERROR_HANDLER \ - jmp $31, __syscall_error -#endif /* RTLD_PRIVATE_ERRNO */ - -/* Overridden by specific syscalls. */ -#undef PSEUDO_PREPARE_ARGS -#define PSEUDO_PREPARE_ARGS /* Nothing. */ - -#define PSEUDO(name, syscall_name, args) \ - .globl name; \ - .align 4; \ - .ent name,0; \ -__LABEL(name) \ - PSEUDO_PROLOGUE; \ - PSEUDO_PREPARE_ARGS \ - lda v0, SYS_ify(syscall_name); \ - call_pal PAL_callsys; \ - bne a3, SYSCALL_ERROR_LABEL - -#undef PSEUDO_END -#if defined(PIC) && !RTLD_PRIVATE_ERRNO -# define PSEUDO_END(sym) END(sym) -#else -# define PSEUDO_END(sym) \ -$syscall_error: \ - SYSCALL_ERROR_HANDLER; \ - END(sym) -#endif - -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - .globl name; \ - .align 4; \ - .ent name,0; \ -__LABEL(name) \ - PSEUDO_PROLOGUE; \ - PSEUDO_PREPARE_ARGS \ - lda v0, SYS_ify(syscall_name); \ - call_pal PAL_callsys; - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(sym) END(sym) - -#define ret_NOERRNO ret - -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - .globl name; \ - .align 4; \ - .ent name,0; \ -__LABEL(name) \ - PSEUDO_PROLOGUE; \ - PSEUDO_PREPARE_ARGS \ - lda v0, SYS_ify(syscall_name); \ - call_pal PAL_callsys; - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(sym) END(sym) - -#define ret_ERRVAL ret - -#define r0 v0 -#define r1 a4 - -#define MOVE(x,y) mov x,y - -#else /* !ASSEMBLER */ - -/* ??? Linux needs to be able to override INLINE_SYSCALL for one - particular special case. Make this easy. */ - -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - INLINE_SYSCALL1(name, nr, args) - -#define INLINE_SYSCALL1(name, nr, args...) \ -({ \ - long _sc_ret, _sc_err; \ - inline_syscall##nr(__NR_##name, args); \ - if (__builtin_expect (_sc_err, 0)) \ - { \ - __set_errno (_sc_ret); \ - _sc_ret = -1L; \ - } \ - _sc_ret; \ -}) - -#define INTERNAL_SYSCALL(name, err_out, nr, args...) \ - INTERNAL_SYSCALL1(name, err_out, nr, args) - -#define INTERNAL_SYSCALL1(name, err_out, nr, args...) \ - INTERNAL_SYSCALL_NCS(__NR_##name, err_out, nr, args) - -#define INTERNAL_SYSCALL_NCS(name, err_out, nr, args...) \ -({ \ - long _sc_ret, _sc_err; \ - inline_syscall##nr(name, args); \ - err_out = _sc_err; \ - _sc_ret; \ -}) - -#define INTERNAL_SYSCALL_DECL(err) long int err -#define INTERNAL_SYSCALL_ERROR_P(val, err) err -#define INTERNAL_SYSCALL_ERRNO(val, err) val - -#define inline_syscall_clobbers \ - "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", \ - "$22", "$23", "$24", "$25", "$27", "$28", "memory" - -/* If TLS is in use, we have a conflict between the PAL_rduniq primitive, - as modeled within GCC, and explicit use of the R0 register. If we use - the register via the asm, the scheduler may place the PAL_rduniq insn - before we've copied the data from R0 into _sc_ret. If this happens - we'll get a reload abort, since R0 is live at the same time it is - needed for the PAL_rduniq. - - Solve this by using the "v" constraint instead of an asm for the syscall - output. We don't do this unconditionally to allow compilation with - older compilers. */ - -#ifdef HAVE___THREAD -#define inline_syscall_r0_asm -#define inline_syscall_r0_out_constraint "=v" -#else -#define inline_syscall_r0_asm __asm__("$0") -#define inline_syscall_r0_out_constraint "=r" -#endif - -/* It is moderately important optimization-wise to limit the lifetime - of the hard-register variables as much as possible. Thus we copy - in/out as close to the asm as possible. */ - -#define inline_syscall0(name, args...) \ -{ \ - register long _sc_0 inline_syscall_r0_asm; \ - register long _sc_19 __asm__("$19"); \ - \ - _sc_0 = name; \ - __asm__ __volatile__ \ - ("callsys # %0 %1 <= %2" \ - : inline_syscall_r0_out_constraint (_sc_0), \ - "=r"(_sc_19) \ - : "0"(_sc_0) \ - : inline_syscall_clobbers, \ - "$16", "$17", "$18", "$20", "$21"); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ -} - -#define inline_syscall1(name,arg1) \ -{ \ - register long _sc_0 inline_syscall_r0_asm; \ - register long _sc_16 __asm__("$16"); \ - register long _sc_19 __asm__("$19"); \ - register long _tmp_16 = (long) (arg1); \ - \ - _sc_0 = name; \ - _sc_16 = _tmp_16; \ - __asm__ __volatile__ \ - ("callsys # %0 %1 <= %2 %3" \ - : inline_syscall_r0_out_constraint (_sc_0), \ - "=r"(_sc_19), "=r"(_sc_16) \ - : "0"(_sc_0), "2"(_sc_16) \ - : inline_syscall_clobbers, \ - "$17", "$18", "$20", "$21"); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ -} - -#define inline_syscall2(name,arg1,arg2) \ -{ \ - register long _sc_0 inline_syscall_r0_asm; \ - register long _sc_16 __asm__("$16"); \ - register long _sc_17 __asm__("$17"); \ - register long _sc_19 __asm__("$19"); \ - register long _tmp_16 = (long) (arg1); \ - register long _tmp_17 = (long) (arg2); \ - \ - _sc_0 = name; \ - _sc_16 = _tmp_16; \ - _sc_17 = _tmp_17; \ - __asm__ __volatile__ \ - ("callsys # %0 %1 <= %2 %3 %4" \ - : inline_syscall_r0_out_constraint (_sc_0), \ - "=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17) \ - : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17) \ - : inline_syscall_clobbers, \ - "$18", "$20", "$21"); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ -} - -#define inline_syscall3(name,arg1,arg2,arg3) \ -{ \ - register long _sc_0 inline_syscall_r0_asm; \ - register long _sc_16 __asm__("$16"); \ - register long _sc_17 __asm__("$17"); \ - register long _sc_18 __asm__("$18"); \ - register long _sc_19 __asm__("$19"); \ - register long _tmp_16 = (long) (arg1); \ - register long _tmp_17 = (long) (arg2); \ - register long _tmp_18 = (long) (arg3); \ - \ - _sc_0 = name; \ - _sc_16 = _tmp_16; \ - _sc_17 = _tmp_17; \ - _sc_18 = _tmp_18; \ - __asm__ __volatile__ \ - ("callsys # %0 %1 <= %2 %3 %4 %5" \ - : inline_syscall_r0_out_constraint (_sc_0), \ - "=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17), \ - "=r"(_sc_18) \ - : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17), \ - "4"(_sc_18) \ - : inline_syscall_clobbers, "$20", "$21"); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ -} - -#define inline_syscall4(name,arg1,arg2,arg3,arg4) \ -{ \ - register long _sc_0 inline_syscall_r0_asm; \ - register long _sc_16 __asm__("$16"); \ - register long _sc_17 __asm__("$17"); \ - register long _sc_18 __asm__("$18"); \ - register long _sc_19 __asm__("$19"); \ - register long _tmp_16 = (long) (arg1); \ - register long _tmp_17 = (long) (arg2); \ - register long _tmp_18 = (long) (arg3); \ - register long _tmp_19 = (long) (arg4); \ - \ - _sc_0 = name; \ - _sc_16 = _tmp_16; \ - _sc_17 = _tmp_17; \ - _sc_18 = _tmp_18; \ - _sc_19 = _tmp_19; \ - __asm__ __volatile__ \ - ("callsys # %0 %1 <= %2 %3 %4 %5 %6" \ - : inline_syscall_r0_out_constraint (_sc_0), \ - "=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17), \ - "=r"(_sc_18) \ - : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17), \ - "4"(_sc_18), "1"(_sc_19) \ - : inline_syscall_clobbers, "$20", "$21"); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ -} - -#define inline_syscall5(name,arg1,arg2,arg3,arg4,arg5) \ -{ \ - register long _sc_0 inline_syscall_r0_asm; \ - register long _sc_16 __asm__("$16"); \ - register long _sc_17 __asm__("$17"); \ - register long _sc_18 __asm__("$18"); \ - register long _sc_19 __asm__("$19"); \ - register long _sc_20 __asm__("$20"); \ - register long _tmp_16 = (long) (arg1); \ - register long _tmp_17 = (long) (arg2); \ - register long _tmp_18 = (long) (arg3); \ - register long _tmp_19 = (long) (arg4); \ - register long _tmp_20 = (long) (arg5); \ - \ - _sc_0 = name; \ - _sc_16 = _tmp_16; \ - _sc_17 = _tmp_17; \ - _sc_18 = _tmp_18; \ - _sc_19 = _tmp_19; \ - _sc_20 = _tmp_20; \ - __asm__ __volatile__ \ - ("callsys # %0 %1 <= %2 %3 %4 %5 %6 %7" \ - : inline_syscall_r0_out_constraint (_sc_0), \ - "=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17), \ - "=r"(_sc_18), "=r"(_sc_20) \ - : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17), \ - "4"(_sc_18), "1"(_sc_19), "5"(_sc_20) \ - : inline_syscall_clobbers, "$21"); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ -} - -#define inline_syscall6(name,arg1,arg2,arg3,arg4,arg5,arg6) \ -{ \ - register long _sc_0 inline_syscall_r0_asm; \ - register long _sc_16 __asm__("$16"); \ - register long _sc_17 __asm__("$17"); \ - register long _sc_18 __asm__("$18"); \ - register long _sc_19 __asm__("$19"); \ - register long _sc_20 __asm__("$20"); \ - register long _sc_21 __asm__("$21"); \ - register long _tmp_16 = (long) (arg1); \ - register long _tmp_17 = (long) (arg2); \ - register long _tmp_18 = (long) (arg3); \ - register long _tmp_19 = (long) (arg4); \ - register long _tmp_20 = (long) (arg5); \ - register long _tmp_21 = (long) (arg6); \ - \ - _sc_0 = name; \ - _sc_16 = _tmp_16; \ - _sc_17 = _tmp_17; \ - _sc_18 = _tmp_18; \ - _sc_19 = _tmp_19; \ - _sc_20 = _tmp_20; \ - _sc_21 = _tmp_21; \ - __asm__ __volatile__ \ - ("callsys # %0 %1 <= %2 %3 %4 %5 %6 %7 %8" \ - : inline_syscall_r0_out_constraint (_sc_0), \ - "=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17), \ - "=r"(_sc_18), "=r"(_sc_20), "=r"(_sc_21) \ - : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17), "4"(_sc_18), \ - "1"(_sc_19), "5"(_sc_20), "6"(_sc_21) \ - : inline_syscall_clobbers); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ -} - -/* Pointer mangling support. Note that tls access is slow enough that - we don't deoptimize things by placing the pointer check value there. */ - -#include <stdint.h> - -#if defined NOT_IN_libc && defined IS_IN_rtld -# ifdef __ASSEMBLER__ -# define PTR_MANGLE(dst, src, tmp) \ - ldah tmp, __pointer_chk_guard_local($29) !gprelhigh; \ - ldq tmp, __pointer_chk_guard_local(tmp) !gprellow; \ - xor src, tmp, dst -# define PTR_MANGLE2(dst, src, tmp) \ - xor src, tmp, dst -# define PTR_DEMANGLE(dst, tmp) PTR_MANGLE(dst, dst, tmp) -# define PTR_DEMANGLE2(dst, tmp) PTR_MANGLE2(dst, dst, tmp) -# else -extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden; -# define PTR_MANGLE(var) \ - (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local) -# define PTR_DEMANGLE(var) PTR_MANGLE(var) -# endif -#elif defined PIC -# ifdef __ASSEMBLER__ -# define PTR_MANGLE(dst, src, tmp) \ - ldq tmp, __pointer_chk_guard; \ - xor src, tmp, dst -# define PTR_MANGLE2(dst, src, tmp) \ - xor src, tmp, dst -# define PTR_DEMANGLE(dst, tmp) PTR_MANGLE(dst, dst, tmp) -# define PTR_DEMANGLE2(dst, tmp) PTR_MANGLE2(dst, dst, tmp) -# else -extern uintptr_t __pointer_chk_guard attribute_relro; -# define PTR_MANGLE(var) \ - (var) = (void *) ((uintptr_t) (var) ^ __pointer_chk_guard) -# define PTR_DEMANGLE(var) PTR_MANGLE(var) -# endif -#endif - -#endif /* ASSEMBLER */ diff --git a/sysdeps/unix/sysv/linux/alpha/Implies b/sysdeps/unix/sysv/linux/alpha/Implies deleted file mode 100644 index 1616efecbe..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/Implies +++ /dev/null @@ -1,4 +0,0 @@ -unix/sysv/linux/wordsize-64 -# These supply the ABI compatibility for when long double was double. -ieee754/ldbl-64-128 -ieee754/ldbl-opt diff --git a/sysdeps/unix/sysv/linux/alpha/Makefile b/sysdeps/unix/sysv/linux/alpha/Makefile deleted file mode 100644 index f64f23fd7a..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -ifeq ($(subdir),posix) -sysdep_routines += oldglob -endif - -ifeq ($(subdir),stdlib) -gen-as-const-headers += ucontext-offsets.sym -endif - -ifeq ($(subdir),misc) -sysdep_headers += alpha/ptrace.h alpha/regdef.h sys/io.h - -sysdep_routines += ieee_get_fp_control ieee_set_fp_control \ - ioperm llseek - -# Support old timeval32 entry points -sysdep_routines += osf_select osf_gettimeofday osf_settimeofday \ - osf_getitimer osf_setitimer osf_utimes \ - osf_getrusage osf_wait4 - -# Support old ipc control -sysdep_routines += oldmsgctl oldsemctl oldshmctl - -CFLAGS-ioperm.c = -Wa,-mev6 -endif - -ifeq ($(subdir),signal) -sysdep_routines += rt_sigaction -endif - -ifeq ($(subdir),math) -# These 2 routines are normally in libgcc{.a,_s.so.1}. -# However, alpha -mlong-double-128 libgcc relies on -# glibc providing _Ots* routines and without these files -# glibc relies on __multc3/__divtc3 only provided -# by libgcc if configured with -mlong-double-128. -# Provide these routines here as well. -libm-routines += multc3 divtc3 -endif # math diff --git a/sysdeps/unix/sysv/linux/alpha/Versions b/sysdeps/unix/sysv/linux/alpha/Versions deleted file mode 100644 index 8709dd2a38..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/Versions +++ /dev/null @@ -1,94 +0,0 @@ -libc { - # The comment lines with "#errlist-compat" are magic; see - # sysdeps/gnu/errlist-compat.awk. - # When you get an error from errlist-compat.awk, you need to add a new - # version here. Don't do this blindly, since this means changing the ABI - # for all GNU/Linux configurations. - - GLIBC_2.0 { - #errlist-compat 131 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - - # Unfortunately in wider use. - _inb; _inw; _inl; _outb; _outw; _outl; _bus_base; _bus_base_sparse; - _hae_shift; - - # Exception handling support functions from libgcc - __register_frame; __register_frame_table; __deregister_frame; - __frame_state_for; __register_frame_info_table; - - # b* - bus_base; bus_base_sparse; - - # h* - hae_shift; - - # i* - inb; inl; inw; ioperm; iopl; - - # o* - outb; outl; outw; - - # p* - pciconfig_read; pciconfig_write; sethae; - } - GLIBC_2.1 { - #errlist-compat 131 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - - # Linux/Alpha 64-bit timeval functions. - __select; select; - adjtime; adjtimex; __adjtimex; - __gettimeofday; - - # glob interface change - glob; globfree; - - # limit type change - getrusage; - - # time type change - gettimeofday; getitimer; - - # i* - ieee_get_fp_control; ieee_set_fp_control; - - # s* - setitimer; settimeofday; - - # u* - utimes; - - # w* - wait4; - } - GLIBC_2.1.4 { - pciconfig_iobase; - } - GLIBC_2.2.2 { - # w* - wordexp; - } - GLIBC_2.3 { - #errlist-compat 132 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.4 { - #errlist-compat 138 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_PRIVATE { - __libc_alpha_cache_shape; - } -} -ld { - GLIBC_PRIVATE { - __libc_alpha_cache_shape; - } -} -librt { - GLIBC_2.3 { - # AIO functions. - aio_cancel; aio_cancel64; - } -} diff --git a/sysdeps/unix/sysv/linux/alpha/a.out.h b/sysdeps/unix/sysv/linux/alpha/a.out.h deleted file mode 100644 index a7699f0fe0..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/a.out.h +++ /dev/null @@ -1,197 +0,0 @@ -#ifndef __A_OUT_GNU_H__ -#define __A_OUT_GNU_H__ - -#include <bits/a.out.h> - -#define __GNU_EXEC_MACROS__ - -/* - * OSF/1 ECOFF header structs. ECOFF files consist of: - * - a file header (struct filehdr), - * - an a.out header (struct aouthdr), - * - one or more section headers (struct scnhdr). - * The filhdr's "f_nscns" field contains the - * number of section headers. - */ - -struct filehdr -{ - /* OSF/1 "file" header */ - unsigned short f_magic, f_nscns; - unsigned int f_timdat; - unsigned long f_symptr; - unsigned int f_nsyms; - unsigned short f_opthdr, f_flags; -}; - -struct aouthdr -{ - unsigned long info; /* After that it looks quite normal.. */ - unsigned long tsize; - unsigned long dsize; - unsigned long bsize; - unsigned long entry; - unsigned long text_start; /* With a few additions that actually make sense. */ - unsigned long data_start; - unsigned long bss_start; - unsigned int gprmask, fprmask; /* Bitmask of general & floating point regs used in binary. */ - unsigned long gpvalue; -}; - -struct scnhdr -{ - char s_name[8]; - unsigned long s_paddr; - unsigned long s_vaddr; - unsigned long s_size; - unsigned long s_scnptr; - unsigned long s_relptr; - unsigned long s_lnnoptr; - unsigned short s_nreloc; - unsigned short s_nlnno; - unsigned int s_flags; -}; - -struct exec -{ - /* OSF/1 "file" header */ - struct filehdr fh; - struct aouthdr ah; -}; - -#define a_info ah.info -#define a_text ah.tsize -#define a_data ah.dsize -#define a_bss ah.bsize -#define a_entry ah.entry -#define a_textstart ah.text_start -#define a_datastart ah.data_start -#define a_bssstart ah.bss_start -#define a_gprmask ah.gprmask -#define a_fprmask ah.fprmask -#define a_gpvalue ah.gpvalue - - -#define AOUTHSZ sizeof(struct aouthdr) -#define SCNHSZ sizeof(struct scnhdr) -#define SCNROUND 16 - -enum machine_type -{ - M_OLDSUN2 = 0, - M_68010 = 1, - M_68020 = 2, - M_SPARC = 3, - M_386 = 100, - M_MIPS1 = 151, - M_MIPS2 = 152 -}; - -#define N_MAGIC(exec) ((exec).a_info & 0xffff) -#define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff)) -#define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff) -#define N_SET_INFO(exec, magic, type, flags) \ - ((exec).a_info = ((magic) & 0xffff) \ - | (((int)(type) & 0xff) << 16) \ - | (((flags) & 0xff) << 24)) -#define N_SET_MAGIC(exec, magic) \ - ((exec).a_info = ((exec).a_info & 0xffff0000) | ((magic) & 0xffff)) -#define N_SET_MACHTYPE(exec, machtype) \ - ((exec).a_info = \ - ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16)) -#define N_SET_FLAGS(exec, flags) \ - ((exec).a_info = \ - ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24)) - -/* Code indicating object file or impure executable. */ -#define OMAGIC 0407 -/* Code indicating pure executable. */ -#define NMAGIC 0410 -/* Code indicating demand-paged executable. */ -#define ZMAGIC 0413 -/* This indicates a demand-paged executable with the header in the text. - The first page is unmapped to help trap NULL pointer references. */ -#define QMAGIC 0314 -/* Code indicating core file. */ -#define CMAGIC 0421 - -#define N_TRSIZE(x) 0 -#define N_DRSIZE(x) 0 -#define N_SYMSIZE(x) 0 -#define N_BADMAG(x) \ - (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \ - && N_MAGIC(x) != ZMAGIC && N_MAGIC(x) != QMAGIC) -#define _N_HDROFF(x) (1024 - sizeof (struct exec)) -#define N_TXTOFF(x) \ - ((long) N_MAGIC(x) == ZMAGIC ? 0 : \ - (sizeof (struct exec) + (x).fh.f_nscns * SCNHSZ + SCNROUND - 1) \ - & ~(SCNROUND - 1)) - -#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text) -#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data) -#define N_DRELOFF(x) (N_TRELOFF(x) + N_TRSIZE(x)) -#define N_SYMOFF(x) (N_DRELOFF(x) + N_DRSIZE(x)) -#define N_STROFF(x) (N_SYMOFF(x) + N_SYMSIZE(x)) - -/* Address of text segment in memory after it is loaded. */ -#define N_TXTADDR(x) ((x).a_textstart) - -/* Address of data segment in memory after it is loaded. */ -#define SEGMENT_SIZE 1024 - -#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1)) -#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text) - -#define N_DATADDR(x) ((x).a_datastart) -#define N_BSSADDR(x) ((x).a_bssstart) - -#if !defined (N_NLIST_DECLARED) -struct nlist -{ - union - { - char *n_name; - struct nlist *n_next; - long n_strx; - } n_un; - unsigned char n_type; - char n_other; - short n_desc; - unsigned long n_value; -}; -#endif /* no N_NLIST_DECLARED. */ - -#define N_UNDF 0 -#define N_ABS 2 -#define N_TEXT 4 -#define N_DATA 6 -#define N_BSS 8 -#define N_FN 15 -#define N_EXT 1 -#define N_TYPE 036 -#define N_STAB 0340 -#define N_INDR 0xa -#define N_SETA 0x14 /* Absolute set element symbol. */ -#define N_SETT 0x16 /* Text set element symbol. */ -#define N_SETD 0x18 /* Data set element symbol. */ -#define N_SETB 0x1A /* Bss set element symbol. */ -#define N_SETV 0x1C /* Pointer to set vector in data area. */ - -#if !defined (N_RELOCATION_INFO_DECLARED) -/* This structure describes a single relocation to be performed. - The text-relocation section of the file is a vector of these structures, - all of which apply to the text section. - Likewise, the data-relocation section applies to the data section. */ - -struct relocation_info -{ - int r_address; - unsigned int r_symbolnum:24; - unsigned int r_pcrel:1; - unsigned int r_length:2; - unsigned int r_extern:1; - unsigned int r_pad:4; -}; -#endif /* no N_RELOCATION_INFO_DECLARED. */ - -#endif /* __A_OUT_GNU_H__ */ diff --git a/sysdeps/unix/sysv/linux/alpha/adjtime.c b/sysdeps/unix/sysv/linux/alpha/adjtime.c deleted file mode 100644 index 1700524d34..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/adjtime.c +++ /dev/null @@ -1,220 +0,0 @@ -/* Copyright (C) 1998,2000,2002,2003,2004,2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <shlib-compat.h> -#include <sysdep.h> -#include <sys/time.h> -#include <kernel-features.h> - -#if !defined __ASSUME_TIMEVAL64 || SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) -struct timeval32 -{ - int tv_sec, tv_usec; -}; - -struct timex32 { - unsigned int modes; /* mode selector */ - long offset; /* time offset (usec) */ - long freq; /* frequency offset (scaled ppm) */ - long maxerror; /* maximum error (usec) */ - long esterror; /* estimated error (usec) */ - int status; /* clock command/status */ - long constant; /* pll time constant */ - long precision; /* clock precision (usec) (read only) */ - long tolerance; /* clock frequency tolerance (ppm) - * (read only) - */ - struct timeval32 time; /* (read only) */ - long tick; /* (modified) usecs between clock ticks */ - - long ppsfreq; /* pps frequency (scaled ppm) (ro) */ - long jitter; /* pps jitter (us) (ro) */ - int shift; /* interval duration (s) (shift) (ro) */ - long stabil; /* pps stability (scaled ppm) (ro) */ - long jitcnt; /* jitter limit exceeded (ro) */ - long calcnt; /* calibration intervals (ro) */ - long errcnt; /* calibration errors (ro) */ - long stbcnt; /* stability limit exceeded (ro) */ - - int :32; int :32; int :32; int :32; - int :32; int :32; int :32; int :32; - int :32; int :32; int :32; int :32; -}; - -#define TIMEVAL timeval32 -#define TIMEX timex32 -#define ADJTIME attribute_compat_text_section __adjtime_tv32 -#define ADJTIMEX(x) INLINE_SYSCALL (old_adjtimex, 1, x) -#define ADJTIMEX32(x) INLINE_SYSCALL (old_adjtimex, 1, x) -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) -#define LINKAGE -#else -#define LINKAGE static -#endif - -LINKAGE int ADJTIME (const struct TIMEVAL *itv, struct TIMEVAL *otv); - -#include <sysdeps/unix/sysv/linux/adjtime.c> - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) -int -attribute_compat_text_section -__adjtimex_tv32 (struct timex32 *tx) { return ADJTIMEX (tx); } -strong_alias (__adjtimex_tv32, __adjtimex_tv32_1); -strong_alias (__adjtimex_tv32, __adjtimex_tv32_2); -compat_symbol (libc, __adjtimex_tv32_1, __adjtimex, GLIBC_2_0); -compat_symbol (libc, __adjtimex_tv32_2, adjtimex, GLIBC_2_0); -compat_symbol (libc, __adjtime_tv32, adjtime, GLIBC_2_0); -#endif -#endif /* !__ASSUME_TIMEVAL64 || SHLIB_COMPAT */ - -#undef TIMEVAL -#define TIMEVAL timeval -#undef TIMEX -#define TIMEX timex -#undef ADJTIMEX -#define ADJTIMEX(x) INLINE_SYSCALL (adjtimex, 1, x) - -#undef LINKAGE -#undef ADJTIME -#if !defined __ASSUME_TIMEVAL64 -#define LINKAGE static -#define ADJTIME __adjtime_tv64 -#endif - -#include <sysdeps/unix/sysv/linux/adjtime.c> -#include <stdbool.h> - -#if !defined __ASSUME_TIMEVAL64 -static bool missing_adjtimex; - -int -__adjtime (itv, otv) - const struct timeval *itv; - struct timeval *otv; -{ - struct timeval32 itv32, otv32; - int ret; - - switch (missing_adjtimex) - { - case false: - ret = __adjtime_tv64 (itv, otv); - if (ret && errno == ENOSYS) - missing_adjtimex = 1; - else - break; - - /* FALLTHRU */ - - default: - itv32.tv_sec = itv->tv_sec; - itv32.tv_usec = itv->tv_usec; - ret = __adjtime_tv32 (&itv32, &otv32); - if (ret == 0) - { - otv->tv_sec = otv32.tv_sec; - otv->tv_usec = otv32.tv_usec; - } - break; - } - - return ret; -} -#endif - -versioned_symbol (libc, __adjtime, adjtime, GLIBC_2_1); - -int -__adjtimex_tv64 (struct timex *tx) -{ -#if defined __ASSUME_TIMEVAL64 - return ADJTIMEX (tx); -#else - struct timex32 tx32; - int ret; - - switch (missing_adjtimex) - { - case false: - ret = ADJTIMEX (tx); - if (ret && errno == ENOSYS) - missing_adjtimex = 1; - else - break; - - /* FALLTHRU */ - - default: - tx32.modes = tx->modes; - tx32.offset = tx->offset; - tx32.freq = tx->freq; - tx32.maxerror = tx->maxerror; - tx32.esterror = tx->esterror; - tx32.status = tx->status; - tx32.constant = tx->constant; - tx32.precision = tx->precision; - tx32.tolerance = tx->tolerance; - tx32.time.tv_sec = tx->time.tv_sec; - tx32.time.tv_sec = tx->time.tv_usec; - tx32.tick = tx->tick; - tx32.ppsfreq = tx->ppsfreq; - tx32.jitter = tx->jitter; - tx32.shift = tx->shift; - tx32.stabil = tx->stabil; - tx32.jitcnt = tx->jitcnt; - tx32.calcnt = tx->calcnt; - tx32.errcnt = tx->errcnt; - tx32.stbcnt = tx->stbcnt; - - ret = ADJTIMEX32 (&tx32); - if (ret == 0) - { - tx->modes = tx32.modes; - tx->offset = tx32.offset; - tx->freq = tx32.freq; - tx->maxerror = tx32.maxerror; - tx->esterror = tx32.esterror; - tx->status = tx32.status; - tx->constant = tx32.constant; - tx->precision = tx32.precision; - tx->tolerance = tx32.tolerance; - tx->time.tv_sec = tx32.time.tv_sec; - tx->time.tv_usec = tx32.time.tv_sec; - tx->tick = tx32.tick; - tx->ppsfreq = tx32.ppsfreq; - tx->jitter = tx32.jitter; - tx->shift = tx32.shift; - tx->stabil = tx32.stabil; - tx->jitcnt = tx32.jitcnt; - tx->calcnt = tx32.calcnt; - tx->errcnt = tx32.errcnt; - tx->stbcnt = tx32.stbcnt; - } - break; - } - - return ret; -#endif -} - -strong_alias (__adjtimex_tv64, __adjtimex_internal); -strong_alias (__adjtimex_tv64, __adjtimex_tv64p); -weak_alias (__adjtimex_tv64, ntp_adjtime); -versioned_symbol (libc, __adjtimex_tv64, __adjtimex, GLIBC_2_1); -versioned_symbol (libc, __adjtimex_tv64p, adjtimex, GLIBC_2_1); diff --git a/sysdeps/unix/sysv/linux/alpha/alpha/ptrace.h b/sysdeps/unix/sysv/linux/alpha/alpha/ptrace.h deleted file mode 100644 index 57b96d64db..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/alpha/ptrace.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef __alpha_ptrace_h__ -#define __alpha_ptrace_h__ - -/* - * Mostly for OSF/1 compatibility. - */ - -#define REG_BASE 0 -#define NGP_REGS 32 -#define NFP_REGS 32 - -#define GPR_BASE REG_BASE -#define FPR_BASE (GPR_BASE+NGP_REGS) -#define PC (FPR_BASE+NFP_REGS) -#define SPR_PS (PC+1) -#define NPTRC_REGS (SPR_PS+1) - -#endif /* __alpha_ptrace_h__ */ diff --git a/sysdeps/unix/sysv/linux/alpha/alpha/regdef.h b/sysdeps/unix/sysv/linux/alpha/alpha/regdef.h deleted file mode 100644 index 142df9c4f8..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/alpha/regdef.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef __alpha_regdef_h__ -#define __alpha_regdef_h__ - -#define v0 $0 /* function return value */ - -#define t0 $1 /* temporary registers (caller-saved) */ -#define t1 $2 -#define t2 $3 -#define t3 $4 -#define t4 $5 -#define t5 $6 -#define t6 $7 -#define t7 $8 - -#define s0 $9 /* saved-registers (callee-saved registers) */ -#define s1 $10 -#define s2 $11 -#define s3 $12 -#define s4 $13 -#define s5 $14 -#define s6 $15 -#define fp s6 /* frame-pointer (s6 in frame-less procedures) */ - -#define a0 $16 /* argument registers (caller-saved) */ -#define a1 $17 -#define a2 $18 -#define a3 $19 -#define a4 $20 -#define a5 $21 - -#define t8 $22 /* more temps (caller-saved) */ -#define t9 $23 -#define t10 $24 -#define t11 $25 -#define ra $26 /* return address register */ -#define t12 $27 - -#define pv t12 /* procedure-variable register */ -#define AT $at /* assembler temporary */ -#define gp $29 /* global pointer */ -#define sp $30 /* stack pointer */ -#define zero $31 /* reads as zero, writes are noops */ - -#endif /* __alpha_regdef_h__ */ diff --git a/sysdeps/unix/sysv/linux/alpha/alphaev6/fpu/Implies b/sysdeps/unix/sysv/linux/alpha/alphaev6/fpu/Implies deleted file mode 100644 index 0d7000dc2d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/alphaev6/fpu/Implies +++ /dev/null @@ -1,2 +0,0 @@ -# Override ldbl-opt with alpha specific routines. -alpha/alphaev6/fpu diff --git a/sysdeps/unix/sysv/linux/alpha/alphaev67/fpu/Implies b/sysdeps/unix/sysv/linux/alpha/alphaev67/fpu/Implies deleted file mode 100644 index 617c388d2d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/alphaev67/fpu/Implies +++ /dev/null @@ -1,2 +0,0 @@ -# Override ldbl-opt with alpha specific routines. -alpha/alphaev67/fpu diff --git a/sysdeps/unix/sysv/linux/alpha/bits/a.out.h b/sysdeps/unix/sysv/linux/alpha/bits/a.out.h deleted file mode 100644 index 82a3dd4c0d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/a.out.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __A_OUT_GNU_H__ -# error "Never use <bits/a.out.h> directly; include <a.out.h> instead." -#endif -#ifndef __A_OUT_GNU_H__ -# error "Never use <bits/a.out.h> directly; include <a.out.h> instead." -#endif -#ifndef __A_OUT_GNU_H__ -# error "Never use <bits/a.out.h> directly; include <a.out.h> instead." -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/bits/dirent.h b/sysdeps/unix/sysv/linux/alpha/bits/dirent.h deleted file mode 100644 index 6ed74783ad..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/dirent.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 1996, 1997 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _BITS_DIRENT_H -#define _BITS_DIRENT_H 1 - -struct dirent - { -#ifdef __USE_FILE_OFFSET64 - __ino64_t d_ino; -#else - __ino_t d_ino; - int __pad; -#endif - __off_t d_off; - unsigned short int d_reclen; - unsigned char d_type; - char d_name[256]; /* We must not include limits.h! */ - }; - -#ifdef __USE_LARGEFILE64 -/* Note dirent64 is the same as dirent. */ -struct dirent64 - { - __ino64_t d_ino; - __off64_t d_off; - unsigned short int d_reclen; - unsigned char d_type; - char d_name[256]; /* We must not include limits.h! */ - }; -#endif - -#define d_fileno d_ino /* Backwards compatibility. */ - -#undef _DIRENT_HAVE_D_NAMLEN -#define _DIRENT_HAVE_D_RECLEN -#define _DIRENT_HAVE_D_OFF -#define _DIRENT_HAVE_D_TYPE - -#endif /* bits/dirent.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/elfclass.h b/sysdeps/unix/sysv/linux/alpha/bits/elfclass.h deleted file mode 100644 index e5aa4a0fbd..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/elfclass.h +++ /dev/null @@ -1,14 +0,0 @@ -/* This file specifies the native word size of the machine, which indicates - the ELF file class used for executables and shared objects on this - machine. */ - -#ifndef _LINK_H -# error "Never use <bits/elfclass.h> directly; include <link.h> instead." -#endif - -#include <bits/wordsize.h> - -#define __ELF_NATIVE_CLASS __WORDSIZE - -/* Linux/Alpha is exceptional as it has .hash section with 64 bit entries. */ -typedef uint64_t Elf_Symndx; diff --git a/sysdeps/unix/sysv/linux/alpha/bits/errno.h b/sysdeps/unix/sysv/linux/alpha/bits/errno.h deleted file mode 100644 index 8b2f152a1c..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/errno.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Error constants. Linux/Alpha specific version. - Copyright (C) 1996,1997,1998,1999,2002,2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifdef _ERRNO_H - -# undef EDOM -# undef EILSEQ -# undef ERANGE -# include <linux/errno.h> - -/* Linux has no ENOTSUP error code. */ -# define ENOTSUP EOPNOTSUPP - -# ifndef ECANCELED -# define ECANCELED 131 -# endif - -/* Support for error codes to support robust mutexes was added later, too. */ -# ifndef EOWNERDEAD -# define EOWNERDEAD 136 -# define ENOTRECOVERABLE 137 -# endif - -# ifndef __ASSEMBLER__ -/* Function to get address of global `errno' variable. */ -extern int *__errno_location (void) __THROW __attribute__ ((__const__)); - -# if !defined _LIBC || defined _LIBC_REENTRANT -/* When using threads, errno is a per-thread value. */ -# define errno (*__errno_location ()) -# endif -# endif /* !__ASSEMBLER__ */ -#endif /* _ERRNO_H */ - -#if !defined _ERRNO_H && defined __need_Emath -/* This is ugly but the kernel header is not clean enough. We must - define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is - defined. */ -# define EDOM 33 /* Math argument out of domain of function. */ -# define EILSEQ 116 /* Illegal byte sequence. */ -# define ERANGE 34 /* Math result not representable. */ -#endif /* !_ERRNO_H && __need_Emath */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h b/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h deleted file mode 100644 index 710bace21f..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h +++ /dev/null @@ -1,232 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995-2000,2004,2005,2006,2007 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _FCNTL_H -# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead." -#endif - -#include <sys/types.h> -#ifdef __USE_GNU -# include <bits/uio.h> -#endif - - -/* open/fcntl - O_SYNC is only implemented on blocks devices and on files - located on an ext2 file system */ -#define O_ACCMODE 0003 -#define O_RDONLY 00 -#define O_WRONLY 01 -#define O_RDWR 02 -#define O_CREAT 01000 /* not fcntl */ -#define O_TRUNC 02000 /* not fcntl */ -#define O_EXCL 04000 /* not fcntl */ -#define O_NOCTTY 010000 /* not fcntl */ - -#define O_NONBLOCK 00004 -#define O_APPEND 00010 -#define O_NDELAY O_NONBLOCK -#define O_SYNC 040000 -#define O_FSYNC O_SYNC -#define O_ASYNC 020000 /* fcntl, for BSD compatibility */ - -#ifdef __USE_GNU -# define O_DIRECTORY 0100000 /* Must be a directory. */ -# define O_NOFOLLOW 0200000 /* Do not follow links. */ -# define O_DIRECT 02000000 /* Direct disk access. */ -# define O_NOATIME 04000000 /* Do not set atime. */ -# define O_CLOEXEC 010000000 /* Set close_on_exec. */ -#endif - -#ifdef __USE_LARGEFILE64 -/* Not necessary, files are always with 64bit off_t. */ -# define O_LARGEFILE 0 -#endif - -/* For now Linux has synchronisity options for data and read operations. - We define the symbols here but let them do the same as O_SYNC since - this is a superset. */ -#if defined __USE_POSIX199309 || defined __USE_UNIX98 -# define O_DSYNC O_SYNC /* Synchronize data. */ -# define O_RSYNC O_SYNC /* Synchronize read operations. */ -#endif - -/* Values for the second argument to `fcntl'. */ -#define F_DUPFD 0 /* Duplicate file descriptor. */ -#define F_GETFD 1 /* Get file descriptor flags. */ -#define F_SETFD 2 /* Set file descriptor flags. */ -#define F_GETFL 3 /* Get file status flags. */ -#define F_SETFL 4 /* Set file status flags. */ -#define F_GETLK 7 /* Get record locking info. */ -#define F_SETLK 8 /* Set record locking info (non-blocking). */ -#define F_SETLKW 9 /* Set record locking info (blocking). */ -#define F_GETLK64 F_GETLK /* Get record locking info. */ -#define F_SETLK64 F_SETLK /* Set record locking info (non-blocking). */ -#define F_SETLKW64 F_SETLKW /* Set record locking info (blocking). */ - -#if defined __USE_BSD || defined __USE_UNIX98 -# define F_SETOWN 5 /* Get owner of socket (receiver of SIGIO). */ -# define F_GETOWN 6 /* Set owner of socket (receiver of SIGIO). */ -#endif - -#ifdef __USE_GNU -# define F_SETSIG 10 /* Set number of signal to be sent. */ -# define F_GETSIG 11 /* Get number of signal to be sent. */ -#endif - -#ifdef __USE_GNU -# define F_SETLEASE 1024 /* Set a lease. */ -# define F_GETLEASE 1025 /* Enquire what lease is active. */ -# define F_NOTIFY 1026 /* Request notfications on a directory. */ -# define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with - close-on-exit set. */ -#endif - -/* for F_[GET|SET]FD */ -#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ - -/* For posix fcntl() and `l_type' field of a `struct flock' for lockf() */ -#define F_RDLCK 1 /* Read lock. */ -#define F_WRLCK 2 /* Write lock. */ -#define F_UNLCK 8 /* Remove lock. */ - -/* for old implementation of bsd flock () */ -#define F_EXLCK 16 /* or 3 */ -#define F_SHLCK 32 /* or 4 */ - -/* Operations for bsd flock(), also used by the kernel implementation */ -#ifdef __USE_BSD -# define LOCK_SH 1 /* shared lock */ -# define LOCK_EX 2 /* exclusive lock */ -# define LOCK_NB 4 /* or'd with one of the above to prevent - blocking */ -# define LOCK_UN 8 /* remove lock */ -#endif - -#ifdef __USE_GNU -# define LOCK_MAND 32 /* This is a mandatory flock: */ -# define LOCK_READ 64 /* ... which allows concurrent read operations. */ -# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */ -# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */ -#endif - -#ifdef __USE_GNU -/* Types of directory notifications that may be requested with F_NOTIFY. */ -# define DN_ACCESS 0x00000001 /* File accessed. */ -# define DN_MODIFY 0x00000002 /* File modified. */ -# define DN_CREATE 0x00000004 /* File created. */ -# define DN_DELETE 0x00000008 /* File removed. */ -# define DN_RENAME 0x00000010 /* File renamed. */ -# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ -# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ -#endif - -/* We don't need to support __USE_FILE_OFFSET64. */ -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - - -/* Define some more compatibility macros to be backward compatible with - BSD systems which did not managed to hide these kernel macros. */ -#ifdef __USE_BSD -# define FAPPEND O_APPEND -# define FFSYNC O_FSYNC -# define FASYNC O_ASYNC -# define FNONBLOCK O_NONBLOCK -# define FNDELAY O_NDELAY -#endif /* Use BSD. */ - -/* Advise to `posix_fadvise'. */ -#ifdef __USE_XOPEN2K -# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ -# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ -# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ -# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ -# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ -# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ -#endif - - -#ifdef __USE_GNU -/* Flags for SYNC_FILE_RANGE. */ -# define SYNC_FILE_RANGE_WAIT_BEFORE 1 /* Wait upon writeout of all pages - in the range before performing the - write. */ -# define SYNC_FILE_RANGE_WRITE 2 /* Initiate writeout of all those - dirty pages in the range which are - not presently under writeback. */ -# define SYNC_FILE_RANGE_WAIT_AFTER 4 /* Wait upon writeout of all pages in - the range after performing the - write. */ - -/* Flags for SPLICE and VMSPLICE. */ -# define SPLICE_F_MOVE 1 /* Move pages instead of copying. */ -# define SPLICE_F_NONBLOCK 2 /* Don't block on the pipe splicing - (but we may still block on the fd - we splice from/to). */ -# define SPLICE_F_MORE 4 /* Expect more data. */ -# define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ -#endif - -__BEGIN_DECLS - -#ifdef __USE_GNU - -/* Provide kernel hint to read ahead. */ -extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count) - __THROW; - - -/* Selective file content synch'ing. */ -extern int sync_file_range (int __fd, __off64_t __from, __off64_t __to, - unsigned int __flags); - - -/* Splice address range into a pipe. */ -extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, - size_t __count, unsigned int __flags); - -/* Splice two files together. */ -extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, - __off64_t *__offout, size_t __len, - unsigned int __flags); - -/* In-kernel implementation of tee for pipe buffers. */ -extern ssize_t tee (int __fdin, int __fdout, size_t __len, - unsigned int __flags); - -#endif - -__END_DECLS diff --git a/sysdeps/unix/sysv/linux/alpha/bits/ioctls.h b/sysdeps/unix/sysv/linux/alpha/bits/ioctls.h deleted file mode 100644 index c525046e5c..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/ioctls.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1996, 1997 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_IOCTL_H -# error "Never use <bits/ioctls.h> directly; include <sys/ioctl.h> instead." -#endif - -/* Use the definitions from the kernel header files. */ -#include <asm/ioctls.h> - -/* Oh well, this is necessary since the kernel data structure is - different from the user-level version. */ -#undef TCGETS -#undef TCSETS -#undef TCSETSW -#undef TCSETSF -#define TCGETS _IOR ('t', 19, char[44]) -#define TCSETS _IOW ('t', 20, char[44]) -#define TCSETSW _IOW ('t', 21, char[44]) -#define TCSETSF _IOW ('t', 22, char[44]) - -#include <linux/sockios.h> diff --git a/sysdeps/unix/sysv/linux/alpha/bits/ipc.h b/sysdeps/unix/sysv/linux/alpha/bits/ipc.h deleted file mode 100644 index 77f3c938d4..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/ipc.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_IPC_H -# error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead." -#endif - -#include <bits/types.h> - -/* Mode bits for `msgget', `semget', and `shmget'. */ -#define IPC_CREAT 01000 /* Create key if key does not exist. */ -#define IPC_EXCL 02000 /* Fail if key exists. */ -#define IPC_NOWAIT 04000 /* Return error on wait. */ - -/* Control commands for `msgctl', `semctl', and `shmctl'. */ -#define IPC_RMID 0 /* Remove identifier. */ -#define IPC_SET 1 /* Set `ipc_perm' options. */ -#define IPC_STAT 2 /* Get `ipc_perm' options. */ -#ifdef __USE_GNU -# define IPC_INFO 3 /* See ipcs. */ -#endif - -/* Special key values. */ -#define IPC_PRIVATE ((__key_t) 0) /* Private key. */ - - -/* Data structure used to pass permission information to IPC operations. */ -struct ipc_perm - { - __key_t __key; /* Key. */ - unsigned int uid; /* Owner's user ID. */ - unsigned int gid; /* Owner's group ID. */ - unsigned int cuid; /* Creator's user ID. */ - unsigned int cgid; /* Creator's group ID. */ - unsigned int mode; /* Read/write permission. */ - unsigned short int __seq; /* Sequence number. */ - unsigned short int __pad1; - unsigned long int __unused1; - unsigned long int __unused2; - }; diff --git a/sysdeps/unix/sysv/linux/alpha/bits/mman.h b/sysdeps/unix/sysv/linux/alpha/bits/mman.h deleted file mode 100644 index 2f0e564916..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/mman.h +++ /dev/null @@ -1,118 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/Alpha version. - Copyright (C) 1997, 1998, 2000, 2003, 2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_MMAN_H -# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead." -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - - -/* Protections are chosen from these bits, OR'd together. The - implementation does not necessarily support PROT_EXEC or PROT_WRITE - without PROT_READ. The only guarantees are that no writing will be - allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ - -#define PROT_READ 0x1 /* Page can be read. */ -#define PROT_WRITE 0x2 /* Page can be written. */ -#define PROT_EXEC 0x4 /* Page can be executed. */ -#define PROT_NONE 0x0 /* Page can not be accessed. */ -#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of - growsdown vma (mprotect only). */ -#define PROT_GROWSUP 0x02000000 /* Extend change to start of - growsup vma (mprotect only). */ - -/* Sharing types (must choose one and only one of these). */ -#define MAP_SHARED 0x01 /* Share changes. */ -#define MAP_PRIVATE 0x02 /* Changes are private. */ -#ifdef __USE_MISC -# define MAP_TYPE 0x0f /* Mask for type of mapping. */ -#endif - -/* Other flags. */ -#define MAP_FIXED 0x100 /* Interpret addr exactly. */ -#ifdef __USE_MISC -# define MAP_FILE 0 -# define MAP_ANONYMOUS 0x10 /* Don't use a file. */ -# define MAP_ANON MAP_ANONYMOUS -#endif - -/* Not used by Linux, but here to make sure we don't clash with - OSF/1 defines. */ -#if 0 && defined __USE_BSD -# define MAP_HASSEMAPHORE 0x0200 -# define MAP_INHERIT 0x0400 -# define MAP_UNALIGNED 0x0800 -#endif - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_GROWSDOWN 0x01000 /* Stack-like segment. */ -# define MAP_DENYWRITE 0x02000 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x04000 /* Mark it as an executable. */ -# define MAP_LOCKED 0x08000 /* Lock the mapping. */ -# define MAP_NORESERVE 0x10000 /* Don't check for reservations. */ -# define MAP_POPULATE 0x20000 /* Populate (prefault) pagetables. */ -# define MAP_NONBLOCK 0x40000 /* Do not block on IO. */ -#endif - -/* Flags to `msync'. */ -#define MS_ASYNC 1 /* Sync memory asynchronously. */ -#define MS_SYNC 2 /* Synchronous memory sync. */ -#define MS_INVALIDATE 4 /* Invalidate the caches. */ - -/* Flags for `mlockall'. */ -#define MCL_CURRENT 8192 /* Lock all currently mapped pages. */ -#define MCL_FUTURE 16384 /* Lock all additions to address - space. */ - -/* Flags for `mremap'. */ -#ifdef __USE_GNU -# define MREMAP_MAYMOVE 1 -# define MREMAP_FIXED 2 -#endif - -/* Advice to `madvise'. */ -#ifdef __USE_BSD -# define MADV_NORMAL 0 /* No further special treatment. */ -# define MADV_RANDOM 1 /* Expect random page references. */ -# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ -# define MADV_WILLNEED 3 /* Will need these pages. */ -# define MADV_DONTNEED 6 /* Don't need these pages. */ -# define MADV_REMOVE 9 /* Remove these pages and resources. */ -# define MADV_DONTFORK 10 /* Do not inherit across fork. */ -# define MADV_DOFORK 11 /* Do inherit across fork. */ -#endif - -/* The POSIX people had to invent similar names for the same things. */ -#ifdef __USE_XOPEN2K -# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ -# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ -# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ -# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ -# define POSIX_MADV_DONTNEED 6 /* Don't need these pages. */ -#endif - -/* Not used by Linux, but here to make sure we don't clash with - OSF/1 defines. */ -#if 0 && defined __USE_BSD -# define MADV_DONTNEED_COMPAT 4 /* Old version? */ -# define MADV_SPACEAVAIL 5 /* Ensure resources are available. */ -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/bits/msq.h b/sysdeps/unix/sysv/linux/alpha/bits/msq.h deleted file mode 100644 index ab251eaf76..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/msq.h +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright (C) 1995, 1996, 1997, 2000 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_MSG_H -# error "Never use <bits/msq.h> directly; include <sys/msg.h> instead." -#endif - -#include <bits/types.h> - -/* Define options for message queue functions. */ -#define MSG_NOERROR 010000 /* no error if message is too big */ -#ifdef __USE_GNU -# define MSG_EXCEPT 020000 /* recv any msg except of specified type */ -#endif - -/* Types used in the structure definition. */ -typedef unsigned long int msgqnum_t; -typedef unsigned long int msglen_t; - - -/* Structure of record for one message inside the kernel. - The type `struct msg' is opaque. */ -struct msqid_ds -{ - struct ipc_perm msg_perm; /* structure describing operation permission */ - __time_t msg_stime; /* time of last msgsnd command */ - __time_t msg_rtime; /* time of last msgrcv command */ - __time_t msg_ctime; /* time of last change */ - unsigned long int __msg_cbytes; /* current number of bytes on queue */ - msgqnum_t msg_qnum; /* number of messages currently on queue */ - msglen_t msg_qbytes; /* max number of bytes allowed on queue */ - __pid_t msg_lspid; /* pid of last msgsnd() */ - __pid_t msg_lrpid; /* pid of last msgrcv() */ - unsigned long int __unused1; - unsigned long int __unused2; -}; - -#ifdef __USE_MISC - -# define msg_cbytes __msg_cbytes - -/* ipcs ctl commands */ -# define MSG_STAT 11 -# define MSG_INFO 12 - -/* buffer for msgctl calls IPC_INFO, MSG_INFO */ -struct msginfo - { - int msgpool; - int msgmap; - int msgmax; - int msgmnb; - int msgmni; - int msgssz; - int msgtql; - unsigned short int msgseg; - }; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/netdb.h b/sysdeps/unix/sysv/linux/alpha/bits/netdb.h deleted file mode 100644 index e3664fd292..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/netdb.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1996, 1997, 1998, 1999, 2000 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _NETDB_H -# error "Never include <bits/netdb.h> directly; use <netdb.h> instead." -#endif - - -/* Description of data base entry for a single network. NOTE: here a - poor assumption is made. The network number is expected to fit - into an unsigned long int variable. */ -struct netent -{ - char *n_name; /* Official name of network. */ - char **n_aliases; /* Alias list. */ - int n_addrtype; /* Net address type. */ - /* XXX We should probably use uint32_t for the field and ensure - compatiblity by adding appropriate padding. */ - unsigned long int n_net; /* Network number. */ -}; diff --git a/sysdeps/unix/sysv/linux/alpha/bits/resource.h b/sysdeps/unix/sysv/linux/alpha/bits/resource.h deleted file mode 100644 index 92d0199dcd..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/resource.h +++ /dev/null @@ -1,233 +0,0 @@ -/* Bit values & structures for resource limits. Alpha/Linux version. - Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2004, 2005 - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_RESOURCE_H -# error "Never use <bits/resource.h> directly; include <sys/resource.h> instead." -#endif - -#include <bits/types.h> - -/* Transmute defines to enumerations. The macro re-definitions are - necessary because some programs want to test for operating system - features with #ifdef RUSAGE_SELF. In ISO C the reflexive - definition is a no-op. */ - -/* Kinds of resource limit. */ -enum __rlimit_resource -{ - /* Per-process CPU limit, in seconds. */ - RLIMIT_CPU = 0, -#define RLIMIT_CPU RLIMIT_CPU - - /* Largest file that can be created, in bytes. */ - RLIMIT_FSIZE = 1, -#define RLIMIT_FSIZE RLIMIT_FSIZE - - /* Maximum size of data segment, in bytes. */ - RLIMIT_DATA = 2, -#define RLIMIT_DATA RLIMIT_DATA - - /* Maximum size of stack segment, in bytes. */ - RLIMIT_STACK = 3, -#define RLIMIT_STACK RLIMIT_STACK - - /* Largest core file that can be created, in bytes. */ - RLIMIT_CORE = 4, -#define RLIMIT_CORE RLIMIT_CORE - - /* Largest resident set size, in bytes. - This affects swapping; processes that are exceeding their - resident set size will be more likely to have physical memory - taken from them. */ - __RLIMIT_RSS = 5, -#define RLIMIT_RSS __RLIMIT_RSS - - /* Number of open files. */ - RLIMIT_NOFILE = 6, - __RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */ -#define RLIMIT_NOFILE RLIMIT_NOFILE -#define RLIMIT_OFILE __RLIMIT_OFILE - - /* Address space limit (?) */ - RLIMIT_AS = 7, -#define RLIMIT_AS RLIMIT_AS - - /* Number of processes. */ - __RLIMIT_NPROC = 8, -#define RLIMIT_NPROC __RLIMIT_NPROC - - /* Locked-in-memory address space. */ - __RLIMIT_MEMLOCK = 9, -#define RLIMIT_MEMLOCK __RLIMIT_MEMLOCK - - /* Maximum number of file locks. */ - __RLIMIT_LOCKS = 10, -#define RLIMIT_LOCKS __RLIMIT_LOCKS - - /* Maximum number of pending signals. */ - __RLIMIT_SIGPENDING = 11, -#define RLIMIT_SIGPENDING __RLIMIT_SIGPENDING - - /* Maximum bytes in POSIX message queues. */ - __RLIMIT_MSGQUEUE = 12, -#define RLIMIT_MSGQUEUE __RLIMIT_MSGQUEUE - - /* Maximum nice priority allowed to raise to. - Nice levels 19 .. -20 correspond to 0 .. 39 - values of this resource limit. */ - __RLIMIT_NICE = 13, -#define RLIMIT_NICE __RLIMIT_NICE - - /* Maximum realtime priority allowed for non-priviledged - processes. */ - __RLIMIT_RTPRIO = 14, -#define RLIMIT_RTPRIO __RLIMIT_RTPRIO - - __RLIMIT_NLIMITS = 15, - __RLIM_NLIMITS = __RLIMIT_NLIMITS -#define RLIMIT_NLIMITS __RLIMIT_NLIMITS -#define RLIM_NLIMITS __RLIM_NLIMITS -}; - -/* Value to indicate that there is no limit. */ -#ifndef __USE_FILE_OFFSET64 -# define RLIM_INFINITY ((long int)(~0UL >> 1)) -#else -# define RLIM_INFINITY 0x7fffffffffffffffLL -#endif - -#ifdef __USE_LARGEFILE64 -# define RLIM64_INFINITY 0x7fffffffffffffffLL -#endif - -/* We can represent all limits. */ -#define RLIM_SAVED_MAX RLIM_INFINITY -#define RLIM_SAVED_CUR RLIM_INFINITY - - -/* Type for resource quantity measurement. */ -#ifndef __USE_FILE_OFFSET64 -typedef __rlim_t rlim_t; -#else -typedef __rlim64_t rlim_t; -#endif -#ifdef __USE_LARGEFILE64 -typedef __rlim64_t rlim64_t; -#endif - -struct rlimit - { - /* The current (soft) limit. */ - rlim_t rlim_cur; - /* The hard limit. */ - rlim_t rlim_max; - }; - -#ifdef __USE_LARGEFILE64 -struct rlimit64 - { - /* The current (soft) limit. */ - rlim64_t rlim_cur; - /* The hard limit. */ - rlim64_t rlim_max; - }; -#endif - -/* Whose usage statistics do you want? */ -enum __rusage_who -{ - /* The calling process. */ - RUSAGE_SELF = 0, -#define RUSAGE_SELF RUSAGE_SELF - - /* All of its terminated child processes. */ - RUSAGE_CHILDREN = -1, -#define RUSAGE_CHILDREN RUSAGE_CHILDREN - -#ifdef __USE_GNU - /* The calling thread. */ - RUSAGE_THREAD = 1 -# define RUSAGE_THREAD RUSAGE_THREAD - /* Name for the same functionality on Solaris. */ -# define RUSAGE_LWP RUSAGE_THREAD -#endif -}; - -#define __need_timeval -#include <bits/time.h> /* For `struct timeval'. */ - -/* Structure which says how much of each resource has been used. */ -struct rusage - { - /* Total amount of user time used. */ - struct timeval ru_utime; - /* Total amount of system time used. */ - struct timeval ru_stime; - /* Maximum resident set size (in kilobytes). */ - long int ru_maxrss; - /* Amount of sharing of text segment memory - with other processes (kilobyte-seconds). */ - long int ru_ixrss; - /* Amount of data segment memory used (kilobyte-seconds). */ - long int ru_idrss; - /* Amount of stack memory used (kilobyte-seconds). */ - long int ru_isrss; - /* Number of soft page faults (i.e. those serviced by reclaiming - a page from the list of pages awaiting reallocation. */ - long int ru_minflt; - /* Number of hard page faults (i.e. those that required I/O). */ - long int ru_majflt; - /* Number of times a process was swapped out of physical memory. */ - long int ru_nswap; - /* Number of input operations via the file system. Note: This - and `ru_oublock' do not include operations with the cache. */ - long int ru_inblock; - /* Number of output operations via the file system. */ - long int ru_oublock; - /* Number of IPC messages sent. */ - long int ru_msgsnd; - /* Number of IPC messages received. */ - long int ru_msgrcv; - /* Number of signals delivered. */ - long int ru_nsignals; - /* Number of voluntary context switches, i.e. because the process - gave up the process before it had to (usually to wait for some - resource to be available). */ - long int ru_nvcsw; - /* Number of involuntary context switches, i.e. a higher priority process - became runnable or the current process used up its time slice. */ - long int ru_nivcsw; - }; - -/* Priority limits. */ -#define PRIO_MIN -20 /* Minimum priority a process can have. */ -#define PRIO_MAX 20 /* Maximum priority a process can have. */ - -/* The type of the WHICH argument to `getpriority' and `setpriority', - indicating what flavor of entity the WHO argument specifies. */ -enum __priority_which -{ - PRIO_PROCESS = 0, /* WHO is a process ID. */ -#define PRIO_PROCESS PRIO_PROCESS - PRIO_PGRP = 1, /* WHO is a process group ID. */ -#define PRIO_PGRP PRIO_PGRP - PRIO_USER = 2 /* WHO is a user ID. */ -#define PRIO_USER PRIO_USER -}; diff --git a/sysdeps/unix/sysv/linux/alpha/bits/sem.h b/sysdeps/unix/sysv/linux/alpha/bits/sem.h deleted file mode 100644 index f63360b2bc..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/sem.h +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright (C) 1995, 1996, 1997, 1998, 2000 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_SEM_H -# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead." -#endif - -#include <sys/types.h> - -/* Flags for `semop'. */ -#define SEM_UNDO 0x1000 /* undo the operation on exit */ - -/* Commands for `semctl'. */ -#define GETPID 11 /* get sempid */ -#define GETVAL 12 /* get semval */ -#define GETALL 13 /* get all semval's */ -#define GETNCNT 14 /* get semncnt */ -#define GETZCNT 15 /* get semzcnt */ -#define SETVAL 16 /* set semval */ -#define SETALL 17 /* set all semval's */ - - -/* Data structure describing a set of semaphores. */ -struct semid_ds -{ - struct ipc_perm sem_perm; /* operation permission struct */ - __time_t sem_otime; /* last semop() time */ - __time_t sem_ctime; /* last time changed by semctl() */ - unsigned long int sem_nsems; /* number of semaphores in set */ - unsigned long int __unused1; - unsigned long int __unused2; -}; - -/* The user should define a union like the following to use it for arguments - for `semctl'. - - union semun - { - int val; <= value for SETVAL - struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET - unsigned short int *array; <= array for GETALL & SETALL - struct seminfo *__buf; <= buffer for IPC_INFO - }; - - Previous versions of this file used to define this union but this is - incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether - one must define the union or not. */ -#define _SEM_SEMUN_UNDEFINED 1 - -#ifdef __USE_MISC - -/* ipcs ctl cmds */ -# define SEM_STAT 18 -# define SEM_INFO 19 - -struct seminfo -{ - int semmap; - int semmni; - int semmns; - int semmnu; - int semmsl; - int semopm; - int semume; - int semusz; - int semvmx; - int semaem; -}; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/shm.h b/sysdeps/unix/sysv/linux/alpha/bits/shm.h deleted file mode 100644 index cb214e6412..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/shm.h +++ /dev/null @@ -1,101 +0,0 @@ -/* Copyright (C) 1995, 1996, 1997, 2000, 2002, 2004 - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_SHM_H -# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead." -#endif - -#include <bits/types.h> - -/* Permission flag for shmget. */ -#define SHM_R 0400 /* or S_IRUGO from <linux/stat.h> */ -#define SHM_W 0200 /* or S_IWUGO from <linux/stat.h> */ - -/* Flags for `shmat'. */ -#define SHM_RDONLY 010000 /* attach read-only else read-write */ -#define SHM_RND 020000 /* round attach address to SHMLBA */ -#define SHM_REMAP 040000 /* take-over region on attach */ - -/* Commands for `shmctl'. */ -#define SHM_LOCK 11 /* lock segment (root only) */ -#define SHM_UNLOCK 12 /* unlock segment (root only) */ - -__BEGIN_DECLS - -/* Segment low boundary address multiple. */ -#define SHMLBA (__getpagesize ()) -extern int __getpagesize (void) __THROW __attribute__ ((__const__)); - - -/* Type to count number of attaches. */ -typedef unsigned long int shmatt_t; - -/* Data structure describing a shared memory segment. */ -struct shmid_ds - { - struct ipc_perm shm_perm; /* operation permission struct */ - size_t shm_segsz; /* size of segment in bytes */ - __time_t shm_atime; /* time of last shmat() */ - __time_t shm_dtime; /* time of last shmdt() */ - __time_t shm_ctime; /* time of last change by shmctl() */ - __pid_t shm_cpid; /* pid of creator */ - __pid_t shm_lpid; /* pid of last shmop */ - shmatt_t shm_nattch; /* number of current attaches */ - unsigned long int __unused1; - unsigned long int __unused2; - }; - -#ifdef __USE_MISC - -/* ipcs ctl commands */ -# define SHM_STAT 13 -# define SHM_INFO 14 - -/* shm_mode upper byte flags */ -# define SHM_DEST 01000 /* segment will be destroyed on last detach */ -# define SHM_LOCKED 02000 /* segment will not be swapped */ -# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ -# define SHM_NORESERVE 010000 /* don't check for reservations */ - -struct shminfo - { - unsigned long int shmmax; - unsigned long int shmmin; - unsigned long int shmmni; - unsigned long int shmseg; - unsigned long int shmall; - unsigned long int __unused1; - unsigned long int __unused2; - unsigned long int __unused3; - unsigned long int __unused4; - }; - -struct shm_info - { - int used_ids; - unsigned long int shm_tot; /* total allocated shm */ - unsigned long int shm_rss; /* total resident shm */ - unsigned long int shm_swp; /* total swapped shm */ - unsigned long int swap_attempts; - unsigned long int swap_successes; - }; - -#endif /* __USE_MISC */ - -__END_DECLS diff --git a/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h b/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h deleted file mode 100644 index 80feb2fa2d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h +++ /dev/null @@ -1,74 +0,0 @@ -/* The proper definitions for Linux/Alpha sigaction. - Copyright (C) 1996, 1997, 1999, 2000 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SIGNAL_H -# error "Never include <bits/sigaction.h> directly; use <signal.h> instead." -#endif - -/* Structure describing the action to be taken when a signal arrives. */ -struct sigaction - { - /* Signal handler. */ -#ifdef __USE_POSIX199309 - union - { - /* Used if SA_SIGINFO is not set. */ - __sighandler_t sa_handler; - /* Used if SA_SIGINFO is set. */ - void (*sa_sigaction) (int, siginfo_t *, void *); - } - __sigaction_handler; -# define sa_handler __sigaction_handler.sa_handler -# define sa_sigaction __sigaction_handler.sa_sigaction -#else - __sighandler_t sa_handler; -#endif - - /* Additional set of signals to be blocked. */ - __sigset_t sa_mask; - - /* Special flags. */ - unsigned int sa_flags; - }; - -/* Bits in `sa_flags'. */ -#define SA_NOCLDSTOP 0x00000004 /* Don't send SIGCHLD when children stop. */ -#define SA_NOCLDWAIT 0x00000020 /* Don't create zombie on child death. */ -#define SA_SIGINFO 0x00000040 /* Invoke signal-catching function with - three arguments instead of one. */ -#if defined __USE_UNIX98 || defined __USE_MISC -# define SA_ONSTACK 0x00000001 /* Use signal stack by using `sa_restorer'. */ -# define SA_RESTART 0x00000002 /* Restart syscall on signal return. */ -# define SA_NODEFER 0x00000008 /* Don't automatically block the signal - when its handler is being executed. */ -# define SA_RESETHAND 0x00000010 /* Reset to SIG_DFL on entry to handler. */ -#endif -#ifdef __USE_MISC -# define SA_INTERRUPT 0x20000000 /* Historical no-op. */ - -/* Some aliases for the SA_ constants. */ -# define SA_NOMASK SA_NODEFER -# define SA_ONESHOT SA_RESETHAND -# define SA_STACK SA_ONSTACK -#endif - -/* Values for the HOW argument to `sigprocmask'. */ -#define SIG_BLOCK 1 /* Block signals. */ -#define SIG_UNBLOCK 2 /* Unblock signals. */ -#define SIG_SETMASK 3 /* Set the set of blocked signals. */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/siginfo.h b/sysdeps/unix/sysv/linux/alpha/bits/siginfo.h deleted file mode 100644 index a2aacc04b1..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/siginfo.h +++ /dev/null @@ -1,303 +0,0 @@ -/* siginfo_t, sigevent and constants. Linux/Alpha version. - Copyright (C) 1997-2002, 2003 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#if !defined _SIGNAL_H && !defined __need_siginfo_t \ - && !defined __need_sigevent_t -# error "Never include this file directly. Use <signal.h> instead" -#endif - -#if (!defined __have_sigval_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t \ - || defined __need_sigevent_t)) -# define __have_sigval_t 1 - -/* Type for data associated with a signal. */ -typedef union sigval - { - int sival_int; - void *sival_ptr; - } sigval_t; -#endif - -#if (!defined __have_siginfo_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t)) -# define __have_siginfo_t 1 - -# define __SI_MAX_SIZE 128 -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4) - -typedef struct siginfo - { - int si_signo; /* Signal number. */ - int si_errno; /* If non-zero, an errno value associated with - this signal, as defined in <errno.h>. */ - int si_code; /* Signal code. */ - - union - { - int _pad[__SI_PAD_SIZE]; - - /* kill(). */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - } _kill; - - /* POSIX.1b timers. */ - struct - { - int si_tid; /* Timer ID. */ - int si_overrun; /* Overrun count. */ - sigval_t si_sigval; /* Signal value. */ - } _timer; - - /* POSIX.1b signals. */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - sigval_t si_sigval; /* Signal value. */ - } _rt; - - /* SIGCHLD. */ - struct - { - __pid_t si_pid; /* Which child. */ - __uid_t si_uid; /* Real user ID of sending process. */ - int si_status; /* Exit value or signal. */ - __clock_t si_utime; - __clock_t si_stime; - } _sigchld; - - /* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */ - struct - { - void *si_addr; /* Faulting insn/memory ref. */ - } _sigfault; - - /* SIGPOLL. */ - struct - { - int si_band; /* Band event for SIGPOLL. */ - int si_fd; - } _sigpoll; - } _sifields; - } siginfo_t; - - -/* X/Open requires some more fields with fixed names. */ -# define si_pid _sifields._kill.si_pid -# define si_uid _sifields._kill.si_uid -# define si_timerid _sifields._timer.si_tid -# define si_overrun _sifields._timer.si_overrun -# define si_status _sifields._sigchld.si_status -# define si_utime _sifields._sigchld.si_utime -# define si_stime _sifields._sigchld.si_stime -# define si_value _sifields._rt.si_sigval -# define si_int _sifields._rt.si_sigval.sival_int -# define si_ptr _sifields._rt.si_sigval.sival_ptr -# define si_addr _sifields._sigfault.si_addr -# define si_band _sifields._sigpoll.si_band -# define si_fd _sifields._sigpoll.si_fd - - -/* Values for `si_code'. Positive values are reserved for kernel-generated - signals. */ -enum -{ - SI_ASYNCNL = -60, /* Sent by asynch name lookup completion. */ -# define SI_ASYNCNL SI_ASYNCNL - SI_TKILL = -6, /* Sent by tkill. */ -# define SI_TKILL SI_TKILL - SI_SIGIO, /* Sent by queued SIGIO. */ -# define SI_SIGIO SI_SIGIO - SI_ASYNCIO, /* Sent by AIO completion. */ -# define SI_ASYNCIO SI_ASYNCIO - SI_MESGQ, /* Sent by real time mesq state change. */ -# define SI_MESGQ SI_MESGQ - SI_TIMER, /* Sent by timer expiration. */ -# define SI_TIMER SI_TIMER - SI_QUEUE, /* Sent by sigqueue. */ -# define SI_QUEUE SI_QUEUE - SI_USER, /* Sent by kill, sigsend, raise. */ -# define SI_USER SI_USER - SI_KERNEL = 0x80 /* Send by kernel. */ -#define SI_KERNEL SI_KERNEL -}; - - -/* `si_code' values for SIGILL signal. */ -enum -{ - ILL_ILLOPC = 1, /* Illegal opcode. */ -# define ILL_ILLOPC ILL_ILLOPC - ILL_ILLOPN, /* Illegal operand. */ -# define ILL_ILLOPN ILL_ILLOPN - ILL_ILLADR, /* Illegal addressing mode. */ -# define ILL_ILLADR ILL_ILLADR - ILL_ILLTRP, /* Illegal trap. */ -# define ILL_ILLTRP ILL_ILLTRP - ILL_PRVOPC, /* Privileged opcode. */ -# define ILL_PRVOPC ILL_PRVOPC - ILL_PRVREG, /* Privileged register. */ -# define ILL_PRVREG ILL_PRVREG - ILL_COPROC, /* Coprocessor error. */ -# define ILL_COPROC ILL_COPROC - ILL_BADSTK /* Internal stack error. */ -# define ILL_BADSTK ILL_BADSTK -}; - -/* `si_code' values for SIGFPE signal. */ -enum -{ - FPE_INTDIV = 1, /* Integer divide by zero. */ -# define FPE_INTDIV FPE_INTDIV - FPE_INTOVF, /* Integer overflow. */ -# define FPE_INTOVF FPE_INTOVF - FPE_FLTDIV, /* Floating point divide by zero. */ -# define FPE_FLTDIV FPE_FLTDIV - FPE_FLTOVF, /* Floating point overflow. */ -# define FPE_FLTOVF FPE_FLTOVF - FPE_FLTUND, /* Floating point underflow. */ -# define FPE_FLTUND FPE_FLTUND - FPE_FLTRES, /* Floating point inexact result. */ -# define FPE_FLTRES FPE_FLTRES - FPE_FLTINV, /* Floating point invalid operation. */ -# define FPE_FLTINV FPE_FLTINV - FPE_FLTSUB /* Subscript out of range. */ -# define FPE_FLTSUB FPE_FLTSUB -}; - -/* `si_code' values for SIGSEGV signal. */ -enum -{ - SEGV_MAPERR = 1, /* Address not mapped to object. */ -# define SEGV_MAPERR SEGV_MAPERR - SEGV_ACCERR /* Invalid permissions for mapped object. */ -# define SEGV_ACCERR SEGV_ACCERR -}; - -/* `si_code' values for SIGBUS signal. */ -enum -{ - BUS_ADRALN = 1, /* Invalid address alignment. */ -# define BUS_ADRALN BUS_ADRALN - BUS_ADRERR, /* Non-existant physical address. */ -# define BUS_ADRERR BUS_ADRERR - BUS_OBJERR /* Object specific hardware error. */ -# define BUS_OBJERR BUS_OBJERR -}; - -/* `si_code' values for SIGTRAP signal. */ -enum -{ - TRAP_BRKPT = 1, /* Process breakpoint. */ -# define TRAP_BRKPT TRAP_BRKPT - TRAP_TRACE /* Process trace trap. */ -# define TRAP_TRACE TRAP_TRACE -}; - -/* `si_code' values for SIGCHLD signal. */ -enum -{ - CLD_EXITED = 1, /* Child has exited. */ -# define CLD_EXITED CLD_EXITED - CLD_KILLED, /* Child was killed. */ -# define CLD_KILLED CLD_KILLED - CLD_DUMPED, /* Child terminated abnormally. */ -# define CLD_DUMPED CLD_DUMPED - CLD_TRAPPED, /* Traced child has trapped. */ -# define CLD_TRAPPED CLD_TRAPPED - CLD_STOPPED, /* Child has stopped. */ -# define CLD_STOPPED CLD_STOPPED - CLD_CONTINUED /* Stopped child has continued. */ -# define CLD_CONTINUED CLD_CONTINUED -}; - -/* `si_code' values for SIGPOLL signal. */ -enum -{ - POLL_IN = 1, /* Data input available. */ -# define POLL_IN POLL_IN - POLL_OUT, /* Output buffers available. */ -# define POLL_OUT POLL_OUT - POLL_MSG, /* Input message available. */ -# define POLL_MSG POLL_MSG - POLL_ERR, /* I/O error. */ -# define POLL_ERR POLL_ERR - POLL_PRI, /* High priority input available. */ -# define POLL_PRI POLL_PRI - POLL_HUP /* Device disconnected. */ -# define POLL_HUP POLL_HUP -}; - -# undef __need_siginfo_t -#endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ - - -#if (defined _SIGNAL_H || defined __need_sigevent_t) \ - && !defined __have_sigevent_t -# define __have_sigevent_t 1 - -/* Structure to transport application-defined values with signals. */ -# define __SIGEV_MAX_SIZE 64 -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4) - -typedef struct sigevent - { - sigval_t sigev_value; - int sigev_signo; - int sigev_notify; - - union - { - int _pad[__SIGEV_PAD_SIZE]; - - /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the - thread to receive the signal. */ - __pid_t _tid; - - struct - { - void (*_function) (sigval_t); /* Function to start. */ - void *_attribute; /* Really pthread_attr_t. */ - } _sigev_thread; - } _sigev_un; - } sigevent_t; - -/* POSIX names to access some of the members. */ -# define sigev_notify_function _sigev_un._sigev_thread._function -# define sigev_notify_attributes _sigev_un._sigev_thread._attribute - -/* `sigev_notify' values. */ -enum -{ - SIGEV_SIGNAL = 0, /* Notify via signal. */ -# define SIGEV_SIGNAL SIGEV_SIGNAL - SIGEV_NONE, /* Other notification: meaningless. */ -# define SIGEV_NONE SIGEV_NONE - SIGEV_THREAD, /* Deliver via thread creation. */ -# define SIGEV_THREAD SIGEV_THREAD - - SIGEV_THREAD_ID = 4 /* Send signal to specific thread. */ -#define SIGEV_THREAD_ID SIGEV_THREAD_ID -}; - -#endif /* have _SIGNAL_H. */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/signum.h b/sysdeps/unix/sysv/linux/alpha/bits/signum.h deleted file mode 100644 index 477c13175d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/signum.h +++ /dev/null @@ -1,82 +0,0 @@ -/* Signal number definitions. Linux/Alpha version. - Copyright (C) 1996, 1997, 1998, 1999, 2003 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifdef _SIGNAL_H - -/* Fake signal functions. */ -#define SIG_ERR ((__sighandler_t) -1) /* Error return. */ -#define SIG_DFL ((__sighandler_t) 0) /* Default action. */ -#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */ - -#ifdef __USE_UNIX98 -# define SIG_HOLD ((__sighandler_t) 2) /* Add signal to hold mask. */ -#endif - -/* - * Linux/AXP has different signal numbers that Linux/i386: I'm trying - * to make it OSF/1 binary compatible, at least for normal binaries. - */ -#define SIGHUP 1 -#define SIGINT 2 -#define SIGQUIT 3 -#define SIGILL 4 -#define SIGTRAP 5 -#define SIGABRT 6 -#define SIGEMT 7 -#define SIGFPE 8 -#define SIGKILL 9 -#define SIGBUS 10 -#define SIGSEGV 11 -#define SIGSYS 12 -#define SIGPIPE 13 -#define SIGALRM 14 -#define SIGTERM 15 -#define SIGURG 16 -#define SIGSTOP 17 -#define SIGTSTP 18 -#define SIGCONT 19 -#define SIGCHLD 20 -#define SIGCLD SIGCHLD -#define SIGTTIN 21 -#define SIGTTOU 22 -#define SIGIO 23 -#define SIGXCPU 24 -#define SIGXFSZ 25 -#define SIGVTALRM 26 -#define SIGPROF 27 -#define SIGWINCH 28 -#define SIGINFO 29 -#define SIGUSR1 30 -#define SIGUSR2 31 - -#define SIGPOLL SIGIO -#define SIGPWR SIGINFO -#define SIGIOT SIGABRT - -#define _NSIG 65 /* Biggest signal number + 1. */ - -#define SIGRTMIN (__libc_current_sigrtmin ()) -#define SIGRTMAX (__libc_current_sigrtmax ()) - -/* These are the hard limits of the kernel. These values should not be - used directly at user level. */ -#define __SIGRTMIN 32 -#define __SIGRTMAX (_NSIG - 1) - -#endif /* <signal.h> included. */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/sigstack.h b/sysdeps/unix/sysv/linux/alpha/bits/sigstack.h deleted file mode 100644 index 7faaf98d54..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/sigstack.h +++ /dev/null @@ -1,55 +0,0 @@ -/* sigstack, sigaltstack definitions. - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SIGNAL_H -# error "Never include this file directly. Use <signal.h> instead" -#endif - - -/* Structure describing a signal stack (obsolete). */ -struct sigstack - { - __ptr_t ss_sp; /* Signal stack pointer. */ - int ss_onstack; /* Nonzero if executing on this stack. */ - }; - - -/* Possible values for `ss_flags.'. */ -enum -{ - SS_ONSTACK = 1, -#define SS_ONSTACK SS_ONSTACK - SS_DISABLE -#define SS_DISABLE SS_DISABLE -}; - -/* Minimum stack size for a signal handler. */ -#define MINSIGSTKSZ 4096 - -/* System default stack size. */ -#define SIGSTKSZ 16384 - - -/* Alternate, preferred interface. */ -typedef struct sigaltstack - { - __ptr_t ss_sp; - int ss_flags; - size_t ss_size; - } stack_t; diff --git a/sysdeps/unix/sysv/linux/alpha/bits/stat.h b/sysdeps/unix/sysv/linux/alpha/bits/stat.h deleted file mode 100644 index 42748be762..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/stat.h +++ /dev/null @@ -1,157 +0,0 @@ -/* Copyright (C) 1996,1997,1998,1999,2000,2001,2004 - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_STAT_H -# error "Never include <bits/stat.h> directly; use <sys/stat.h> instead." -#endif - -/* Versions of the `struct stat' data structure. */ -#define _STAT_VER_KERNEL 0 -#define _STAT_VER_GLIBC2 1 -#define _STAT_VER_GLIBC2_1 2 -#define _STAT_VER_KERNEL64 3 -#define _STAT_VER_GLIBC2_3_4 3 -#define _STAT_VER _STAT_VER_GLIBC2_3_4 - -/* Versions of the `xmknod' interface. */ -#define _MKNOD_VER_LINUX 0 - - -/* Nanosecond resolution timestamps are stored in a format equivalent to - 'struct timespec'. This is the type used whenever possible but the - Unix namespace rules do not allow the identifier 'timespec' to appear - in the <sys/stat.h> header. Therefore we have to handle the use of - this header in strictly standard-compliant sources special. - - Use neat tidy anonymous unions and structures when possible. */ - -#ifdef __USE_MISC -# if __GNUC_PREREQ(3,3) -# define __ST_TIME(X) \ - __extension__ union { \ - struct timespec st_##X##tim; \ - struct { \ - __time_t st_##X##time; \ - unsigned long st_##X##timensec; \ - }; \ - } -# else -# define __ST_TIME(X) struct timespec st_##X##tim -# define st_atime st_atim.tv_sec -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -# endif -#else -# define __ST_TIME(X) \ - __time_t st_##X##time; \ - unsigned long st_##X##timensec -#endif - - -struct stat - { - __dev_t st_dev; /* Device. */ -#ifdef __USE_FILE_OFFSET64 - __ino64_t st_ino; /* File serial number. */ -#else - __ino_t st_ino; /* File serial number. */ - int __pad0; /* 64-bit st_ino. */ -#endif - __dev_t st_rdev; /* Device number, if device. */ - __off_t st_size; /* Size of file, in bytes. */ -#ifdef __USE_FILE_OFFSET64 - __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ -#else - __blkcnt_t st_blocks; /* Nr. 512-byte blocks allocated. */ - int __pad1; /* 64-bit st_blocks. */ -#endif - __mode_t st_mode; /* File mode. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - __nlink_t st_nlink; /* Link count. */ - int __pad2; /* Real padding. */ - __ST_TIME(a); /* Time of last access. */ - __ST_TIME(m); /* Time of last modification. */ - __ST_TIME(c); /* Time of last status change. */ - long __unused[3]; - }; - -#ifdef __USE_LARGEFILE64 -/* Note stat64 is the same shape as stat. */ -struct stat64 - { - __dev_t st_dev; /* Device. */ - __ino64_t st_ino; /* File serial number. */ - __dev_t st_rdev; /* Device number, if device. */ - __off_t st_size; /* Size of file, in bytes. */ - __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ - __mode_t st_mode; /* File mode. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - __nlink_t st_nlink; /* Link count. */ - int __pad0; /* Real padding. */ - __ST_TIME(a); /* Time of last access. */ - __ST_TIME(m); /* Time of last modification. */ - __ST_TIME(c); /* Time of last status change. */ - long __unused[3]; - }; -#endif - -#undef __ST_TIME - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV -#define _STATBUF_ST_NSEC - -/* Encoding of the file mode. */ - -#define __S_IFMT 0170000 /* These bits determine file type. */ - -/* File types. */ -#define __S_IFDIR 0040000 /* Directory. */ -#define __S_IFCHR 0020000 /* Character device. */ -#define __S_IFBLK 0060000 /* Block device. */ -#define __S_IFREG 0100000 /* Regular file. */ -#define __S_IFIFO 0010000 /* FIFO. */ -#define __S_IFLNK 0120000 /* Symbolic link. */ -#define __S_IFSOCK 0140000 /* Socket. */ - -/* POSIX.1b objects. Note that these macros always evaluate to zero. But - they do it by enforcing the correct use of the macros. */ -#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) - -/* Protection bits. */ - -#define __S_ISUID 04000 /* Set user ID on execution. */ -#define __S_ISGID 02000 /* Set group ID on execution. */ -#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ -#define __S_IREAD 0400 /* Read by owner. */ -#define __S_IWRITE 0200 /* Write by owner. */ -#define __S_IEXEC 0100 /* Execute by owner. */ - -#if defined __USE_ATFILE || defined __USE_GNU -/* XXX This will change to the macro for the next 2008 POSIX revision. */ -# define UTIME_NOW ((1l << 30) - 1l) -# define UTIME_OMIT ((1l << 30) - 2l) -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/bits/statfs.h b/sysdeps/unix/sysv/linux/alpha/bits/statfs.h deleted file mode 100644 index d838e6bf4a..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/statfs.h +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 1997, 1998, 2000, 2003 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_STATFS_H -# error "Never include <bits/statfs.h> directly; use <sys/statfs.h> instead." -#endif - -#include <bits/types.h> /* for __fsid_t and __fsblkcnt_t. */ - -struct statfs - { - int f_type; - int f_bsize; -#ifndef __USE_FILE_OFFSET64 - __fsblkcnt_t f_blocks; - __fsblkcnt_t f_bfree; - __fsblkcnt_t f_bavail; - __fsfilcnt_t f_files; - __fsfilcnt_t f_ffree; -#else - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsfilcnt64_t f_files; - __fsfilcnt64_t f_ffree; -#endif - __fsid_t f_fsid; - int f_namelen; - int f_frsize; - int f_spare[5]; - }; - -#ifdef __USE_LARGEFILE64 -struct statfs64 - { - int f_type; - int f_bsize; - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsfilcnt64_t f_files; - __fsfilcnt64_t f_ffree; - __fsid_t f_fsid; - int f_namelen; - int f_frsize; - int f_spare[5]; - }; -#endif - -/* Tell code we have this member. */ -#define _STATFS_F_NAMELEN -#define _STATFS_F_FRSIZE diff --git a/sysdeps/unix/sysv/linux/alpha/bits/termios.h b/sysdeps/unix/sysv/linux/alpha/bits/termios.h deleted file mode 100644 index 966ccf94da..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/termios.h +++ /dev/null @@ -1,226 +0,0 @@ -/* termios type and macro definitions. Linux version. - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1999, 2003, 2005 - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _TERMIOS_H -# error "Never include <bits/termios.h> directly; use <termios.h> instead." -#endif - -typedef unsigned char cc_t; -typedef unsigned int speed_t; -typedef unsigned int tcflag_t; - -#define NCCS 32 -struct termios - { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_cc[NCCS]; /* control characters */ - cc_t c_line; /* line discipline (== c_cc[33]) */ - speed_t c_ispeed; /* input speed */ - speed_t c_ospeed; /* output speed */ -#define _HAVE_STRUCT_TERMIOS_C_ISPEED 1 -#define _HAVE_STRUCT_TERMIOS_C_OSPEED 1 - }; - -/* c_cc characters */ -#define VEOF 0 -#define VEOL 1 -#define VEOL2 2 -#define VERASE 3 -#define VWERASE 4 -#define VKILL 5 -#define VREPRINT 6 -#define VSWTC 7 -#define VINTR 8 -#define VQUIT 9 -#define VSUSP 10 -#define VSTART 12 -#define VSTOP 13 -#define VLNEXT 14 -#define VDISCARD 15 -#define VMIN 16 -#define VTIME 17 - -/* c_iflag bits */ -#define IGNBRK 0000001 -#define BRKINT 0000002 -#define IGNPAR 0000004 -#define PARMRK 0000010 -#define INPCK 0000020 -#define ISTRIP 0000040 -#define INLCR 0000100 -#define IGNCR 0000200 -#define ICRNL 0000400 -#define IXON 0001000 -#define IXOFF 0002000 -#ifdef __USE_BSD - /* POSIX.1 doesn't want these... */ -# define IXANY 0004000 -# define IUCLC 0010000 -# define IMAXBEL 0020000 -# define IUTF8 0040000 -#endif - -/* c_oflag bits */ -#define OPOST 0000001 -#define ONLCR 0000002 -#define OLCUC 0000004 - -#define OCRNL 0000010 -#define ONOCR 0000020 -#define ONLRET 0000040 - -#define OFILL 00000100 -#define OFDEL 00000200 -#if defined __USE_MISC || defined __USE_XOPEN -# define NLDLY 00001400 -# define NL0 00000000 -# define NL1 00000400 -# define NL2 00001000 -# define NL3 00001400 -# define TABDLY 00006000 -# define TAB0 00000000 -# define TAB1 00002000 -# define TAB2 00004000 -# define TAB3 00006000 -# define CRDLY 00030000 -# define CR0 00000000 -# define CR1 00010000 -# define CR2 00020000 -# define CR3 00030000 -# define FFDLY 00040000 -# define FF0 00000000 -# define FF1 00040000 -# define BSDLY 00100000 -# define BS0 00000000 -# define BS1 00100000 -#endif - -#define VTDLY 00200000 -#define VT0 00000000 -#define VT1 00200000 - -#ifdef __USE_MISC -# define XTABS 01000000 /* Hmm.. Linux/i386 considers this part of TABDLY.. */ -#endif - -/* c_cflag bit meaning */ -#ifdef __USE_MISC -# define CBAUD 0000037 -#endif -#define B0 0000000 /* hang up */ -#define B50 0000001 -#define B75 0000002 -#define B110 0000003 -#define B134 0000004 -#define B150 0000005 -#define B200 0000006 -#define B300 0000007 -#define B600 0000010 -#define B1200 0000011 -#define B1800 0000012 -#define B2400 0000013 -#define B4800 0000014 -#define B9600 0000015 -#define B19200 0000016 -#define B38400 0000017 -#ifdef __USE_MISC -# define EXTA B19200 -# define EXTB B38400 -# define CBAUDEX 0000000 -#endif -#define B57600 00020 -#define B115200 00021 -#define B230400 00022 -#define B460800 00023 -#define B500000 00024 -#define B576000 00025 -#define B921600 00026 -#define B1000000 00027 -#define B1152000 00030 -#define B1500000 00031 -#define B2000000 00032 -#define B2500000 00033 -#define B3000000 00034 -#define B3500000 00035 -#define B4000000 00036 - -#define __MAX_BAUD B4000000 - -#define CSIZE 00001400 -#define CS5 00000000 -#define CS6 00000400 -#define CS7 00001000 -#define CS8 00001400 - -#define CSTOPB 00002000 -#define CREAD 00004000 -#define PARENB 00010000 -#define PARODD 00020000 -#define HUPCL 00040000 - -#define CLOCAL 00100000 -#ifdef __USE_MISC -# define CMSPAR 010000000000 /* mark or space (stick) parity */ -# define CRTSCTS 020000000000 /* flow control */ -#endif - -/* c_lflag bits */ -#define ISIG 0x00000080 -#define ICANON 0x00000100 -#if defined __USE_MISC || defined __USE_XOPEN -# define XCASE 0x00004000 -#endif -#define ECHO 0x00000008 -#define ECHOE 0x00000002 -#define ECHOK 0x00000004 -#define ECHONL 0x00000010 -#define NOFLSH 0x80000000 -#define TOSTOP 0x00400000 -#ifdef __USE_MISC -# define ECHOCTL 0x00000040 -# define ECHOPRT 0x00000020 -# define ECHOKE 0x00000001 -# define FLUSHO 0x00800000 -# define PENDIN 0x20000000 -#endif -#define IEXTEN 0x00000400 - -/* Values for the ACTION argument to `tcflow'. */ -#define TCOOFF 0 -#define TCOON 1 -#define TCIOFF 2 -#define TCION 3 - -/* Values for the QUEUE_SELECTOR argument to `tcflush'. */ -#define TCIFLUSH 0 -#define TCOFLUSH 1 -#define TCIOFLUSH 2 - -/* Values for the OPTIONAL_ACTIONS argument to `tcsetattr'. */ -#define TCSANOW 0 -#define TCSADRAIN 1 -#define TCSAFLUSH 2 - - -#define _IOT_termios /* Hurd ioctl type field. */ \ - _IOT (_IOTS (cflag_t), 4, _IOTS (cc_t), NCCS, _IOTS (speed_t), 2) diff --git a/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h b/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h deleted file mode 100644 index 201585af1f..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h +++ /dev/null @@ -1,66 +0,0 @@ -/* bits/typesizes.h -- underlying types for *_t. Linux/Alpha version. - Copyright (C) 2002, 2003 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _BITS_TYPES_H -# error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead." -#endif - -#ifndef _BITS_TYPESIZES_H -#define _BITS_TYPESIZES_H 1 - -/* See <bits/types.h> for the meaning of these macros. This file exists so - that <bits/types.h> need not vary across different GNU platforms. */ - -#define __DEV_T_TYPE __U64_TYPE -#define __UID_T_TYPE __U32_TYPE -#define __GID_T_TYPE __U32_TYPE -#define __INO_T_TYPE __U32_TYPE -#define __INO64_T_TYPE __U64_TYPE -#define __MODE_T_TYPE __U32_TYPE -#define __NLINK_T_TYPE __U32_TYPE -#define __OFF_T_TYPE __SLONGWORD_TYPE -#define __OFF64_T_TYPE __S64_TYPE -#define __PID_T_TYPE __S32_TYPE -#define __RLIM_T_TYPE __ULONGWORD_TYPE -#define __RLIM64_T_TYPE __U64_TYPE -#define __BLKCNT_T_TYPE __U32_TYPE -#define __BLKCNT64_T_TYPE __U64_TYPE -#define __FSBLKCNT_T_TYPE __S32_TYPE -#define __FSBLKCNT64_T_TYPE __S64_TYPE -#define __FSFILCNT_T_TYPE __U32_TYPE -#define __FSFILCNT64_T_TYPE __U64_TYPE -#define __ID_T_TYPE __U32_TYPE -#define __CLOCK_T_TYPE __SLONGWORD_TYPE -#define __TIME_T_TYPE __SLONGWORD_TYPE -#define __USECONDS_T_TYPE __U32_TYPE -#define __SUSECONDS_T_TYPE __S64_TYPE -#define __DADDR_T_TYPE __S32_TYPE -#define __SWBLK_T_TYPE __SLONGWORD_TYPE -#define __KEY_T_TYPE __S32_TYPE -#define __CLOCKID_T_TYPE __S32_TYPE -#define __TIMER_T_TYPE void * -#define __BLKSIZE_T_TYPE __U32_TYPE -#define __FSID_T_TYPE struct { int __val[2]; } -#define __SSIZE_T_TYPE __SWORD_TYPE - -/* Number of descriptors that can fit in an `fd_set'. */ -#define __FD_SETSIZE 1024 - - -#endif /* bits/typesizes.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/wordsize.h b/sysdeps/unix/sysv/linux/alpha/bits/wordsize.h deleted file mode 100644 index 22fc64109c..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/wordsize.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1999, 2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __WORDSIZE 64 - -#if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL - -/* Signal that we didn't used to have a `long double'. The changes all - the `long double' function variants to be redirects to the double - functions. */ -# define __LONG_DOUBLE_MATH_OPTIONAL 1 -# ifndef __LONG_DOUBLE_128__ -# define __NO_LONG_DOUBLE_MATH 1 -# endif -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/brk.S b/sysdeps/unix/sysv/linux/alpha/brk.S deleted file mode 100644 index e01abebe0e..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/brk.S +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Brendan Kehoe <brendan@zen.org>, 1993. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* __brk is a special syscall under Linux since it never returns an - error. Instead, the error condition is indicated by returning the old - break value (instead of the new, requested one). */ - -#include <sysdep.h> -#define _ERRNO_H -#include <bits/errno.h> - -#ifdef PIC -.section .bss - .align 3 - .globl __curbrk -__curbrk: .skip 8 - .type __curbrk,@object - .size __curbrk,8 -#else -.comm __curbrk, 8 -#endif - - .text -LEAF(__brk, 8) - ldgp gp, 0(t12) - subq sp, 8, sp -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - /* Save the requested brk across the system call. */ - stq a0, 0(sp) - - ldiq v0, __NR_brk - call_pal PAL_callsys - - ldq a0, 0(sp) - - /* Be prepared for an OSF-style brk. */ - bne a3, $err1 - beq v0, $ok - - /* Correctly handle the brk(0) query case. */ - cmoveq a0, v0, a0 - xor a0, v0, t0 - bne t0, $err0 - - /* Update __curbrk and return cleanly. */ - mov zero, v0 -$ok: stq a0, __curbrk - addq sp, 8, sp - ret - - /* What a horrible way to die. */ -$err0: ldi v0, ENOMEM -$err1: addq sp, 8, sp - SYSCALL_ERROR_HANDLER - - END(__brk) - -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/alpha/clone.S b/sysdeps/unix/sysv/linux/alpha/clone.S deleted file mode 100644 index 5e0b21ea15..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/clone.S +++ /dev/null @@ -1,149 +0,0 @@ -/* Copyright (C) 1996, 1997, 2002 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@tamu.edu>, 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include <sysdep.h> -#define _ERRNO_H 1 -#include <bits/errno.h> - -#define CLONE_VM 0x00000100 -#define CLONE_THREAD 0x00010000 - -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, - void *arg, pid_t *ptid, void *tls, pid_t *ctid); - - Note that everything past ARG is technically optional, based - on FLAGS, and that CTID is arg 7, and thus is on the stack. - However, since a load from top-of-stack better be legal always, - we don't bother checking FLAGS. */ - - .text -ENTRY(__clone) -#ifdef PROF - ldgp gp,0(pv) - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at - .prologue 1 -#else - .prologue 0 -#endif - - /* Sanity check arguments. */ - ldiq v0,EINVAL - beq a0,$error /* no NULL function pointers */ - beq a1,$error /* no NULL stack pointers */ - - /* Save the fn ptr and arg on the new stack. */ - subq a1,32,a1 - stq a0,0(a1) - stq a3,8(a1) -#ifdef RESET_PID - stq a2,16(a1) -#endif - - /* The syscall is of the form clone(flags, usp, ptid, ctid, tls). - Shift the flags, ptid, ctid, tls arguments into place; the - child_stack argument is already correct. */ - mov a2,a0 - mov a4,a2 - ldq a3,0(sp) - mov a5,a4 - - /* Do the system call. */ - ldiq v0,__NR_clone - call_pal PAL_callsys - - bne a3,$error - beq v0,thread_start - - /* Successful return from the parent. */ - ret - - /* Something bad happened -- no child created. */ -$error: -#ifndef PROF - br gp,1f -1: ldgp gp,0(gp) -#endif - SYSCALL_ERROR_HANDLER - - END(__clone) - -/* Load up the arguments to the function. Put this block of code in - its own function so that we can terminate the stack trace with our - debug info. */ - - .ent thread_start -thread_start: - .frame fp,0,fp,0 - mov 0, fp - .prologue 0 - -#ifdef RESET_PID - /* Check and see if we need to reset the PID. */ - ldq t0,16(sp) - lda t1,CLONE_THREAD - and t0,t1,t2 - beq t2,2f -1: -#endif - - /* Load up the arguments. */ - ldq pv,0(sp) - ldq a0,8(sp) - addq sp,32,sp - - /* Call the user's function. */ - jsr ra,(pv) - ldgp gp,0(ra) - - /* Call _exit rather than doing it inline for breakpoint purposes. */ - mov v0,a0 -#ifdef PIC - bsr ra, HIDDEN_JUMPTARGET(_exit) !samegp -#else - jsr ra, HIDDEN_JUMPTARGET(_exit) -#endif - - /* Die horribly. */ - halt - -#ifdef RESET_PID -2: - rduniq - lda t1, CLONE_VM - mov v0, s0 - lda v0, -1 - and t0, t1, t2 - bne t2, 3f - lda v0, __NR_getxpid - callsys -3: - stl v0, PID_OFFSET(s0) - stl v0, TID_OFFSET(s0) - br 1b -#endif - - .end thread_start - -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/alpha/dl-auxv.h b/sysdeps/unix/sysv/linux/alpha/dl-auxv.h deleted file mode 100644 index 8afc4dba3b..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/dl-auxv.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Auxiliary vector processing for Linux/Alpha. - Copyright (C) 2007 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Scan the Aux Vector for the cache shape entries. */ - -long __libc_alpha_cache_shape[4] = { -2, -2, -2, -2 }; - -#define DL_PLATFORM_AUXV \ - case AT_L1I_CACHESHAPE: \ - __libc_alpha_cache_shape[0] = av->a_un.a_val; \ - break; \ - case AT_L1D_CACHESHAPE: \ - __libc_alpha_cache_shape[1] = av->a_un.a_val; \ - break; \ - case AT_L2_CACHESHAPE: \ - __libc_alpha_cache_shape[2] = av->a_un.a_val; \ - break; \ - case AT_L3_CACHESHAPE: \ - __libc_alpha_cache_shape[3] = av->a_un.a_val; \ - break; diff --git a/sysdeps/unix/sysv/linux/alpha/dl-brk.S b/sysdeps/unix/sysv/linux/alpha/dl-brk.S deleted file mode 100644 index eeb96544e3..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/dl-brk.S +++ /dev/null @@ -1 +0,0 @@ -#include <brk.S> diff --git a/sysdeps/unix/sysv/linux/alpha/dl-support.c b/sysdeps/unix/sysv/linux/alpha/dl-support.c deleted file mode 100644 index 290217671c..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/dl-support.c +++ /dev/null @@ -1,2 +0,0 @@ -#include "dl-auxv.h" -#include <elf/dl-support.c> diff --git a/sysdeps/unix/sysv/linux/alpha/dl-sysdep.c b/sysdeps/unix/sysv/linux/alpha/dl-sysdep.c deleted file mode 100644 index 4034820f4d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/dl-sysdep.c +++ /dev/null @@ -1,2 +0,0 @@ -#include "dl-auxv.h" -#include <sysdeps/unix/sysv/linux/dl-sysdep.c> diff --git a/sysdeps/unix/sysv/linux/alpha/fpu/Implies b/sysdeps/unix/sysv/linux/alpha/fpu/Implies deleted file mode 100644 index d76f511c2e..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/fpu/Implies +++ /dev/null @@ -1,2 +0,0 @@ -# Override ldbl-opt with alpha specific routines. -alpha/fpu diff --git a/sysdeps/unix/sysv/linux/alpha/fraiseexcpt.c b/sysdeps/unix/sysv/linux/alpha/fraiseexcpt.c deleted file mode 100644 index 5e63be5cc7..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/fraiseexcpt.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright (C) 2004,2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fenv_libc.h> -#include <sysdep.h> -#include <float.h> -#include <kernel-features.h> -#include "kernel_sysinfo.h" - - -int -__feraiseexcept (int excepts) -{ - INTERNAL_SYSCALL_DECL (err); - unsigned long t = excepts; - long r; - - r = INTERNAL_SYSCALL (osf_setsysinfo, err, 2, SSI_IEEE_RAISE_EXCEPTION, &t); - -#ifndef __ASSUME_IEEE_RAISE_EXCEPTION - if (!INTERNAL_SYSCALL_ERROR_P (r, err)) - return 0; - - double d; - - /* If we got an error from SSI_IEEE_RAISE_EXCEPTION, assume it means that - the system call isn't actually implemented. Do the best we can. */ - - /* Invalid implemented with 0 / 0 -> NaN. */ - if (excepts & FE_INVALID) - __asm__ __volatile__ ("divs/su $f31,$f31,%0; trapb" : "=f"(d) : ); - - /* Division By Zero implemented with 1 / 0 -> NaN. */ - if (excepts & FE_DIVBYZERO) - __asm__ __volatile__ ("divs/su %1,$f31,%0; trapb" : "=&f"(d) : "f"(1.0f)); - - /* Overflow and underflow cannot be had all by themselves. We can - generate them with arithmetic, but we always get INEXACT raised - at the same time. Prepare to undo. */ - if ((excepts & (FE_OVERFLOW | FE_UNDERFLOW)) && !(excepts & FE_INEXACT)) - INTERNAL_SYSCALL (osf_getsysinfo, err, 2, GSI_IEEE_FP_CONTROL, &t); - - /* Overflow implemented with FLT_MAX + FLT_MAX -> Inf. */ - if (excepts & FE_OVERFLOW) - __asm__ __volatile__ ("adds/sui %1,%1,%0; trapb" - : "=&f"(d) : "f"(FLT_MAX)); - - /* Underflow implemented with FLT_MIN * FLT_MIN -> 0. */ - if (excepts & FE_UNDERFLOW) - __asm__ __volatile__ ("muls/sui %1,%1,%0; trapb" - : "=&f"(d) : "f"(FLT_MIN)); - - /* Inexact implemented with (long)0.5 -> 0. */ - if ((excepts & (FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)) == FE_INEXACT) - __asm__ __volatile__ ("cvttq/svi %1,%0; trapb" : "=&f"(d) : "f"(0.5f)); - - /* If we raised inexact when not asked, and inexact was not previously - raised, then clear that exception. */ - if ((excepts & (FE_OVERFLOW | FE_UNDERFLOW)) - && !((excepts | t) & FE_INEXACT)) - { - t |= excepts & SWCR_STATUS_MASK; - INTERNAL_SYSCALL (osf_setsysinfo, err, 2, SSI_IEEE_FP_CONTROL, &t); - } -#endif /* !__ASSUME_IEEE_RAISE_EXCEPTION */ - - return 0; -} - -#include <shlib-compat.h> -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feraiseexcept, __old_feraiseexcept) -compat_symbol (libm, __old_feraiseexcept, feraiseexcept, GLIBC_2_1); -#endif - -libm_hidden_ver (__feraiseexcept, feraiseexcept) -versioned_symbol (libm, __feraiseexcept, feraiseexcept, GLIBC_2_2); diff --git a/sysdeps/unix/sysv/linux/alpha/fxstat.c b/sysdeps/unix/sysv/linux/alpha/fxstat.c deleted file mode 100644 index 40e08fd86e..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/fxstat.c +++ /dev/null @@ -1,64 +0,0 @@ -/* fxstat using old-style Unix stat system call. - Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __fxstat64 __fxstat64_disable - -#include <errno.h> -#include <stddef.h> -#include <sys/stat.h> -#include <kernel_stat.h> -#include <sysdep.h> -#include <sys/syscall.h> -#include <xstatconv.h> - -#undef __fxstat64 - - -/* Get information about the file NAME in BUF. */ -int -__fxstat (int vers, int fd, struct stat *buf) -{ - INTERNAL_SYSCALL_DECL (err); - int result, errno_out; - struct kernel_stat kbuf; - - if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64) - { - result = INTERNAL_SYSCALL (fstat64, err, 2, fd, buf); - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return result; - errno_out = INTERNAL_SYSCALL_ERRNO (result, err); - if (errno_out != ENOSYS) - goto fail; - __libc_missing_axp_stat64 = 1; - } - - result = INTERNAL_SYSCALL (fstat, err, 2, fd, &kbuf); - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return __xstat_conv (vers, &kbuf, buf); - errno_out = INTERNAL_SYSCALL_ERRNO (result, err); - - fail: - __set_errno (errno_out); - return -1; -} -hidden_def (__fxstat) -weak_alias (__fxstat, _fxstat); -strong_alias (__fxstat, __fxstat64); -hidden_ver (__fxstat, __fxstat64) diff --git a/sysdeps/unix/sysv/linux/alpha/fxstatat.c b/sysdeps/unix/sysv/linux/alpha/fxstatat.c deleted file mode 100644 index 497694619a..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/fxstatat.c +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright (C) 2005, 2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __fxstatat64 __fxstatat64_disable - -#include <errno.h> -#include <fcntl.h> -#include <stddef.h> -#include <stdio.h> -#include <sys/stat.h> -#include <kernel_stat.h> -#include <sysdep.h> -#include <sys/syscall.h> -#include <xstatconv.h> - -#undef __fxstatat64 - - -/* Get information about the file NAME in BUF. */ -int -__fxstatat (int vers, int fd, const char *file, struct stat *st, int flag) -{ - if (flag & ~AT_SYMLINK_NOFOLLOW) - { - __set_errno (EINVAL); - return -1; - } - - char *buf = NULL; - - if (fd != AT_FDCWD && file[0] != '/') - { - size_t filelen = strlen (file); - static const char procfd[] = "/proc/self/fd/%d/%s"; - /* Buffer for the path name we are going to use. It consists of - - the string /proc/self/fd/ - - the file descriptor number - - the file name provided. - The final NUL is included in the sizeof. A bit of overhead - due to the format elements compensates for possible negative - numbers. */ - size_t buflen = sizeof (procfd) + sizeof (int) * 3 + filelen; - buf = alloca (buflen); - - __snprintf (buf, buflen, procfd, fd, file); - file = buf; - } - - INTERNAL_SYSCALL_DECL (err); - int result, errno_out; - struct kernel_stat kst; - - if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64) - { - if (flag & AT_SYMLINK_NOFOLLOW) - result = INTERNAL_SYSCALL (lstat64, err, 2, file, st); - else - result = INTERNAL_SYSCALL (stat64, err, 2, file, st); - - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return result; - errno_out = INTERNAL_SYSCALL_ERRNO (result, err); - if (errno_out != ENOSYS) - goto fail; - __libc_missing_axp_stat64 = 1; - } - - if (flag & AT_SYMLINK_NOFOLLOW) - result = INTERNAL_SYSCALL (lstat, err, 2, file, &kst); - else - result = INTERNAL_SYSCALL (stat, err, 2, file, &kst); - - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return __xstat_conv (vers, &kst, st); - errno_out = INTERNAL_SYSCALL_ERRNO (result, err); - - fail: - __atfct_seterrno (errno_out, fd, buf); - - return -1; -} -libc_hidden_def (__fxstatat) -strong_alias (__fxstatat, __fxstatat64); -libc_hidden_ver(__fxstatat, __fxstatat64); diff --git a/sysdeps/unix/sysv/linux/alpha/getclktck.c b/sysdeps/unix/sysv/linux/alpha/getclktck.c deleted file mode 100644 index 6636bbe689..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/getclktck.c +++ /dev/null @@ -1,2 +0,0 @@ -#define SYSTEM_CLK_TCK 1024 -#include <sysdeps/unix/sysv/linux/getclktck.c> diff --git a/sysdeps/unix/sysv/linux/alpha/getcontext.S b/sysdeps/unix/sysv/linux/alpha/getcontext.S deleted file mode 100644 index f010f337e6..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/getcontext.S +++ /dev/null @@ -1,188 +0,0 @@ -/* Save current context. - Copyright (C) 2004, 2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#include <ucontext-offsets.h> - -/* ??? Should be a better place for this that's asm friendly. */ -#define SIG_BLOCK 1 - - -ENTRY (__getcontext) -#ifdef PROF - ldgp gp, 0(pv) - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at - .prologue 1 -#else - .prologue 0 -#endif - - bsr $0, __getcontext_x - mov $31, $0 - ret - -END(__getcontext) -weak_alias (__getcontext, getcontext) - - -/* An internal routine used by getcontext and setcontext. - The incomming return address register is $0. */ - - .align 4 - .globl __getcontext_x - .hidden __getcontext_x - .usepv __getcontext_x, no - - cfi_startproc - cfi_return_column (64) -__getcontext_x: - cfi_register (64, 0) - - .set noat - - /* Return value of getcontext. $0 is the only register - whose value is not preserved. */ - stq $31, UC_SIGCTX+SC_REGS($16) - - /* Store all registers into the context. */ - stq $1, UC_SIGCTX+SC_REGS+1*8($16) - stq $2, UC_SIGCTX+SC_REGS+2*8($16) - stq $3, UC_SIGCTX+SC_REGS+3*8($16) - stq $4, UC_SIGCTX+SC_REGS+4*8($16) - stq $5, UC_SIGCTX+SC_REGS+5*8($16) - stq $6, UC_SIGCTX+SC_REGS+6*8($16) - stq $7, UC_SIGCTX+SC_REGS+7*8($16) - stq $8, UC_SIGCTX+SC_REGS+8*8($16) - stq $9, UC_SIGCTX+SC_REGS+9*8($16) - stq $10, UC_SIGCTX+SC_REGS+10*8($16) - stq $11, UC_SIGCTX+SC_REGS+11*8($16) - stq $12, UC_SIGCTX+SC_REGS+12*8($16) - stq $13, UC_SIGCTX+SC_REGS+13*8($16) - stq $14, UC_SIGCTX+SC_REGS+14*8($16) - stq $15, UC_SIGCTX+SC_REGS+15*8($16) - stq $16, UC_SIGCTX+SC_REGS+16*8($16) - stq $17, UC_SIGCTX+SC_REGS+17*8($16) - stq $18, UC_SIGCTX+SC_REGS+18*8($16) - stq $19, UC_SIGCTX+SC_REGS+19*8($16) - stq $20, UC_SIGCTX+SC_REGS+20*8($16) - stq $21, UC_SIGCTX+SC_REGS+21*8($16) - stq $22, UC_SIGCTX+SC_REGS+22*8($16) - stq $23, UC_SIGCTX+SC_REGS+23*8($16) - stq $24, UC_SIGCTX+SC_REGS+24*8($16) - stq $25, UC_SIGCTX+SC_REGS+25*8($16) - stq $26, UC_SIGCTX+SC_REGS+26*8($16) - stq $27, UC_SIGCTX+SC_REGS+27*8($16) - stq $28, UC_SIGCTX+SC_REGS+28*8($16) - stq $29, UC_SIGCTX+SC_REGS+29*8($16) - stq $30, UC_SIGCTX+SC_REGS+30*8($16) - stq $31, UC_SIGCTX+SC_REGS+31*8($16) - - stt $f0, UC_SIGCTX+SC_FPREGS+0*8($16) - stt $f1, UC_SIGCTX+SC_FPREGS+1*8($16) - stt $f2, UC_SIGCTX+SC_FPREGS+2*8($16) - stt $f3, UC_SIGCTX+SC_FPREGS+3*8($16) - stt $f4, UC_SIGCTX+SC_FPREGS+4*8($16) - stt $f5, UC_SIGCTX+SC_FPREGS+5*8($16) - stt $f6, UC_SIGCTX+SC_FPREGS+6*8($16) - stt $f7, UC_SIGCTX+SC_FPREGS+7*8($16) - stt $f8, UC_SIGCTX+SC_FPREGS+8*8($16) - stt $f9, UC_SIGCTX+SC_FPREGS+9*8($16) - stt $f10, UC_SIGCTX+SC_FPREGS+10*8($16) - stt $f11, UC_SIGCTX+SC_FPREGS+11*8($16) - stt $f12, UC_SIGCTX+SC_FPREGS+12*8($16) - stt $f13, UC_SIGCTX+SC_FPREGS+13*8($16) - stt $f14, UC_SIGCTX+SC_FPREGS+14*8($16) - stt $f15, UC_SIGCTX+SC_FPREGS+15*8($16) - stt $f16, UC_SIGCTX+SC_FPREGS+16*8($16) - stt $f17, UC_SIGCTX+SC_FPREGS+17*8($16) - stt $f18, UC_SIGCTX+SC_FPREGS+18*8($16) - stt $f19, UC_SIGCTX+SC_FPREGS+19*8($16) - stt $f20, UC_SIGCTX+SC_FPREGS+20*8($16) - stt $f21, UC_SIGCTX+SC_FPREGS+21*8($16) - stt $f22, UC_SIGCTX+SC_FPREGS+22*8($16) - stt $f23, UC_SIGCTX+SC_FPREGS+23*8($16) - stt $f24, UC_SIGCTX+SC_FPREGS+24*8($16) - stt $f25, UC_SIGCTX+SC_FPREGS+25*8($16) - stt $f26, UC_SIGCTX+SC_FPREGS+26*8($16) - stt $f27, UC_SIGCTX+SC_FPREGS+27*8($16) - stt $f28, UC_SIGCTX+SC_FPREGS+28*8($16) - stt $f29, UC_SIGCTX+SC_FPREGS+29*8($16) - stt $f30, UC_SIGCTX+SC_FPREGS+30*8($16) - stt $f31, UC_SIGCTX+SC_FPREGS+31*8($16) - - mf_fpcr $f0 - lda $1, 8 - stt $f0, UC_SIGCTX+SC_FPCR($16) - - /* The return address of getcontext is the restart pc. */ - stq $26, UC_SIGCTX+SC_PC($16) - - /* Userlevel always has a processor status word of 8. */ - stq $1, UC_SIGCTX+SC_PS($16) - - /* Save registers around the syscall. We preserve $17 - for the benefit of swapcontext. */ - subq $30, 4*8, $30 - cfi_adjust_cfa_offset(4*8) - stq $0, 0($30) - cfi_rel_offset(64, 0) - stq $16, 8($30) - stq $17, 16($30) - - /* Save the current signal mask. Whee, there are three - copies of this in the alpha ucontext_t. */ - lda $16, SIG_BLOCK - lda $17, 0 - lda $0, __NR_osf_sigprocmask - callsys - - ldq $16, 8($30) - ldq $17, 16($30) - - stq $0, UC_OSF_SIGMASK($16) - stq $0, UC_SIGCTX+SC_MASK($16) - stq $0, UC_SIGMASK($16) - stq $31, UC_SIGMASK + 1*8($16) - stq $31, UC_SIGMASK + 2*8($16) - stq $31, UC_SIGMASK + 3*8($16) - stq $31, UC_SIGMASK + 4*8($16) - stq $31, UC_SIGMASK + 5*8($16) - stq $31, UC_SIGMASK + 6*8($16) - stq $31, UC_SIGMASK + 7*8($16) - stq $31, UC_SIGMASK + 8*8($16) - stq $31, UC_SIGMASK + 9*8($16) - stq $31, UC_SIGMASK +10*8($16) - stq $31, UC_SIGMASK +11*8($16) - stq $31, UC_SIGMASK +12*8($16) - stq $31, UC_SIGMASK +13*8($16) - stq $31, UC_SIGMASK +14*8($16) - stq $31, UC_SIGMASK +15*8($16) - - ldq $0, 0($30) - addq $30, 4*8, $30 - cfi_register (64, 0) - cfi_adjust_cfa_offset(-4*8) - ret $31, ($0), 1 - - cfi_endproc - .size __getcontext_x, .-__getcontext_x - .type __getcontext_x, @function diff --git a/sysdeps/unix/sysv/linux/alpha/getdents.c b/sysdeps/unix/sysv/linux/alpha/getdents.c deleted file mode 100644 index dfecfef924..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/getdents.c +++ /dev/null @@ -1,3 +0,0 @@ -#define DIRENT_SET_DP_INO(dp, value) \ - do { (dp)->d_ino = (value); (dp)->__pad = 0; } while (0) -#include <sysdeps/unix/sysv/linux/getdents.c> diff --git a/sysdeps/unix/sysv/linux/alpha/getdents64.c b/sysdeps/unix/sysv/linux/alpha/getdents64.c deleted file mode 100644 index e53570c036..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/getdents64.c +++ /dev/null @@ -1 +0,0 @@ -#include "../getdents64.c" diff --git a/sysdeps/unix/sysv/linux/alpha/gethostname.c b/sysdeps/unix/sysv/linux/alpha/gethostname.c deleted file mode 100644 index 4e15ee43ed..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/gethostname.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2001, 2003 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@redhat.com>, 2001 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <string.h> -#include <unistd.h> - -#include <sysdep.h> -#include <sys/syscall.h> -#include <bp-checks.h> - -int -__gethostname (char *name, size_t len) -{ - int result; - - result = INLINE_SYSCALL (gethostname, 2, CHECK_N (name, len), len); - - if (result == 0 - /* See whether the string is terminated. If not we will return - an error. */ - && memchr (name, '\0', len) == NULL) - { - __set_errno (EOVERFLOW); - result = -1; - } - - return result; -} - -weak_alias (__gethostname, gethostname) diff --git a/sysdeps/unix/sysv/linux/alpha/getitimer.S b/sysdeps/unix/sysv/linux/alpha/getitimer.S deleted file mode 100644 index 6644a5c36d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/getitimer.S +++ /dev/null @@ -1,113 +0,0 @@ -/* Copyright (C) 1998, 2003, 2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#define _ERRNO_H 1 -#include <bits/errno.h> -#include <kernel-features.h> - -.text - -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING -#define GETITIMER __getitimer_tv64 -#else -#define GETITIMER getitimer -#endif - -#if defined __ASSUME_TIMEVAL64 -PSEUDO(GETITIMER, getitimer, 2) - ret -PSEUDO_END(GETITIMER) -#else -/* The problem here is that initially we made struct timeval compatible with - OSF/1, using int32. But we defined time_t with uint64, and later found - that POSIX requires tv_sec to be time_t. - - So now we have to do compatibility stuff. */ - -/* The variable is shared between all wrappers around signal handling - functions which have RT equivalents. */ -.comm __libc_missing_axp_tv64, 4 - -LEAF(GETITIMER, 16) - ldgp gp, 0(pv) - subq sp, 16, sp -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - ldl t0, __libc_missing_axp_tv64 - - /* Save arguments in case we do need to fall back. */ - stq a0, 0(sp) - stq a1, 8(sp) - - bne t0, $do32 - - ldi v0, SYS_ify(getitimer) - callsys - bne a3, $err64 - - /* Everything ok. */ - addq sp, 16, sp - ret - - /* If we didn't get ENOSYS, it is a real error. */ - .align 3 -$err64: cmpeq v0, ENOSYS, t0 - beq t0, $error - stl t0, __libc_missing_axp_tv64 - - /* Recover the saved arguments. */ - ldq a1, 8(sp) - ldq a0, 0(sp) - - .align 3 -$do32: ldi v0, SYS_ify(osf_getitimer) - callsys - bne a3, $error - - /* Copy back to proper format. */ - ldq a1, 8(sp) - ldl t0, 0(a1) - ldl t1, 4(a1) - ldl t2, 8(a1) - ldl t3, 12(a1) - stq t0, 0(a1) - stq t1, 8(a1) - stq t2, 16(a1) - stq t3, 24(a1) - - addq sp, 16, sp - ret - - .align 3 -$error: - addq sp, 16, sp - SYSCALL_ERROR_HANDLER - -END(GETITIMER) -#endif /* __ASSUME_TIMEVAL64 */ - -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING -default_symbol_version (__getitimer_tv64, getitimer, GLIBC_2.1) -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/getrusage.S b/sysdeps/unix/sysv/linux/alpha/getrusage.S deleted file mode 100644 index 0bca4b5f23..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/getrusage.S +++ /dev/null @@ -1,149 +0,0 @@ -/* Copyright (C) 1998, 2003, 2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#define _ERRNO_H 1 -#include <bits/errno.h> -#include <kernel-features.h> - -.text - -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING -#define GETRUSAGE __getrusage_tv64 -#else -#define GETRUSAGE __getrusage -#endif - -#if defined __ASSUME_TIMEVAL64 -PSEUDO(GETRUSAGE, getrusage, 2) - ret -PSEUDO_END(GETRUSAGE) -#else -/* The problem here is that initially we made struct timeval compatible with - OSF/1, using int32. But we defined time_t with uint64, and later found - that POSIX requires tv_sec to be time_t. - - So now we have to do compatibility stuff. */ - -/* The variable is shared between all wrappers around signal handling - functions which have RT equivalents. */ -.comm __libc_missing_axp_tv64, 4 - -LEAF(GETRUSAGE, 16) - ldgp gp, 0(pv) - subq sp, 16, sp -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - ldl t0, __libc_missing_axp_tv64 - - /* Save arguments in case we do need to fall back. */ - stq a0, 0(sp) - stq a1, 8(sp) - - bne t0, $do32 - - ldi v0, SYS_ify(getrusage) - callsys - bne a3, $err64 - - /* Everything ok. */ - addq sp, 16, sp - ret - - /* If we didn't get ENOSYS, it is a real error. */ - .align 3 -$err64: cmpeq v0, ENOSYS, t0 - beq t0, $error - stl t0, __libc_missing_axp_tv64 - - /* Recover the saved arguments. */ - ldq a1, 8(sp) - ldq a0, 0(sp) - - .align 3 -$do32: ldi v0, SYS_ify(osf_getrusage) - callsys - bne a3, $error - - /* Copy back to proper format. */ - ldq a1, 8(sp) - ldl t0, 0(a1) # ru_utime.tv_sec - ldl t1, 4(a1) # ru_utime.tv_usec - ldl t2, 8(a1) # ru_stime.tv_sec - ldl t3, 12(a1) # ru_stime.tv_usec - ldt $f15, 16(a1) # ru_maxrss - ldt $f16, 24(a1) # ru_ixrss - ldt $f17, 32(a1) # ru_idrss - ldt $f18, 40(a1) # ru_isrss - ldt $f19, 48(a1) # ru_minflt - ldt $f20, 56(a1) # ru_majflt - ldt $f21, 64(a1) # ru_nswap - ldt $f22, 72(a1) # ru_inblock - ldt $f23, 80(a1) # ru_oublock - ldt $f24, 88(a1) # ru_msgsend - ldt $f25, 96(a1) # ru_msgrcv - ldt $f26, 104(a1) # ru_nsignals - ldt $f27, 112(a1) # ru_nvcsw - .set noat - ldt $f28, 120(a1) # ru_nivcsw - .set at - stq t0, 0(a1) - stq t1, 8(a1) - stq t2, 16(a1) - stq t3, 24(a1) - stt $f15, 32(a1) - stt $f16, 40(a1) - stt $f17, 48(a1) - stt $f18, 56(a1) - stt $f19, 64(a1) - stt $f20, 72(a1) - stt $f21, 80(a1) - stt $f22, 88(a1) - stt $f23, 96(a1) - stt $f24, 104(a1) - stt $f25, 112(a1) - stt $f26, 120(a1) - stt $f27, 128(a1) - .set noat - stt $f28, 136(a1) - .set at - - addq sp, 16, sp - ret - - .align 3 -$error: - addq sp, 16, sp - SYSCALL_ERROR_HANDLER - -END(GETRUSAGE) -#endif /* __ASSUME_TIMEVAL64 */ - -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING -strong_alias(__getrusage_tv64, ____getrusage_tv64) -default_symbol_version (____getrusage_tv64, __getrusage, GLIBC_2.1) -default_symbol_version (__getrusage_tv64, getrusage, GLIBC_2.1) -#else -weak_alias (__getrusage, getrusage) -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/getsysstats.c b/sysdeps/unix/sysv/linux/alpha/getsysstats.c deleted file mode 100644 index 0e49a84526..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/getsysstats.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Determine various system internal values, Linux/Alpha version. - Copyright (C) 1999 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab <schwab@suse.de> - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - - -/* We need to define a special parser for /proc/cpuinfo. */ -#define GET_NPROCS_PARSER(FP, BUFFER, RESULT) \ - do \ - { \ - /* Find the line that contains the information about the number of \ - active cpus. We don't have to fear extremely long lines since \ - the kernel will not generate them. 8192 bytes are really enough. \ - If there is no "CPUs ..." line then we are on a UP system. */ \ - (RESULT) = 1; \ - while (fgets_unlocked (BUFFER, sizeof (BUFFER), FP) != NULL) \ - if ((sscanf (BUFFER, "cpus active : %d", &(RESULT)) == 1) \ - || (sscanf (BUFFER, "CPUs probed %*d active %d", \ - &(RESULT)) == 1)) \ - break; \ - } \ - while (0) - - -/* On the Alpha we can distinguish between the number of configured and - active cpus. */ -#define GET_NPROCS_CONF_PARSER(FP, BUFFER, RESULT) \ - do \ - { \ - /* Find the line that contains the information about the number of \ - probed cpus. We don't have to fear extremely long lines since \ - the kernel will not generate them. 8192 bytes are really enough. \ - If there is no "CPUs ..." line then we are on a UP system. */ \ - (RESULT) = 1; \ - while (fgets_unlocked ((BUFFER), sizeof (BUFFER), (FP)) != NULL) \ - if ((sscanf (buffer, "cpus detected : %d", &(RESULT)) == 1) \ - || (sscanf (buffer, "CPUs probed %d", &(RESULT)) == 1)) \ - break; \ - } \ - while (0) - -#include <sysdeps/unix/sysv/linux/getsysstats.c> diff --git a/sysdeps/unix/sysv/linux/alpha/gettimeofday.S b/sysdeps/unix/sysv/linux/alpha/gettimeofday.S deleted file mode 100644 index 7c9183a4fe..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/gettimeofday.S +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright (C) 1998, 2002, 2003, 2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#define _ERRNO_H 1 -#include <bits/errno.h> -#include <kernel-features.h> - -.text - -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING -#define GETTIMEOFDAY __gettimeofday_tv64 -#else -#define GETTIMEOFDAY __gettimeofday -#endif - -#if defined __ASSUME_TIMEVAL64 -PSEUDO(GETTIMEOFDAY, gettimeofday, 2) - ret -PSEUDO_END(GETTIMEOFDAY) -#else - -/* The problem here is that initially we made struct timeval compatible with - OSF/1, using int32. But we defined time_t with uint64, and later found - that POSIX requires tv_sec to be time_t. - - So now we have to do compatibility stuff. */ - -/* The variable is shared between all wrappers around signal handling - functions which have RT equivalents. */ -.comm __libc_missing_axp_tv64, 4 - -LEAF(GETTIMEOFDAY, 16) - ldgp gp, 0(pv) - subq sp, 16, sp -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - ldl t0, __libc_missing_axp_tv64 - - /* Save arguments in case we do need to fall back. */ - stq a0, 0(sp) - stq a1, 8(sp) - - bne t0, $do32 - - ldi v0, SYS_ify(gettimeofday) - callsys - bne a3, $err64 - - /* Everything ok. */ - addq sp, 16, sp - ret - - /* If we didn't get ENOSYS, it is a real error. */ - .align 3 -$err64: cmpeq v0, ENOSYS, t0 - beq t0, $error - stl t0, __libc_missing_axp_tv64 - - /* Recover the saved arguments. */ - ldq a1, 8(sp) - ldq a0, 0(sp) - - .align 3 -$do32: ldi v0, SYS_ify(osf_gettimeofday) - callsys - bne a3, $error - - /* Copy back to proper format. */ - ldq a0, 0(sp) - beq a0, 2f - ldl t0, 0(a0) - ldl t1, 4(a0) - stq t0, 0(a0) - stq t1, 8(a0) - -2: addq sp, 16, sp - ret - - .align 3 -$error: - addq sp, 16, sp - SYSCALL_ERROR_HANDLER - -END(GETTIMEOFDAY) -#endif /* __ASSUME_TIMEVAL64 */ - -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING -default_symbol_version (__gettimeofday_tv64, __gettimeofday, GLIBC_2.1) - -/* It seems to me to be a misfeature of the assembler that we can only - have one version-alias per symbol. So create an alias ourselves. - The 'p' is for 'public'. *Shrug* */ -strong_alias (__gettimeofday_tv64, __gettimeofday_tv64p) -default_symbol_version (__gettimeofday_tv64p, gettimeofday, GLIBC_2.1) -#else -weak_alias (__gettimeofday, gettimeofday) -#endif -strong_alias(GETTIMEOFDAY, __gettimeofday_internal) diff --git a/sysdeps/unix/sysv/linux/alpha/glob.c b/sysdeps/unix/sysv/linux/alpha/glob.c deleted file mode 100644 index 84573899d6..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/glob.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 1998, 2000, 2002, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define glob64 __no_glob64_decl -#define globfree64 __no_globfree64_decl - -#include <sys/types.h> -#include <glob.h> -#include <shlib-compat.h> - -/* For Linux/Alpha we have to make the glob symbols versioned. */ -#define glob(pattern, flags, errfunc, pglob) \ - __new_glob (pattern, flags, errfunc, pglob) -#define globfree(pglob) \ - __new_globfree (pglob) - -/* We need prototypes for these new names. */ -extern int __new_glob (const char *__pattern, int __flags, - int (*__errfunc) (const char *, int), - glob_t *__pglob); -extern void __new_globfree (glob_t *__pglob); - -#include <posix/glob.c> - -#undef glob -#undef globfree -#undef glob64 -#undef globfree64 - -versioned_symbol (libc, __new_glob, glob, GLIBC_2_1); -versioned_symbol (libc, __new_globfree, globfree, GLIBC_2_1); -libc_hidden_ver (__new_glob, glob) -libc_hidden_ver (__new_globfree, globfree) - -weak_alias (__new_glob, glob64) -weak_alias (__new_globfree, globfree64) -libc_hidden_ver (__new_globfree, globfree64) diff --git a/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S b/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S deleted file mode 100644 index 4779f175e5..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 1993, 1995, 1996, 2003, 2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger <davidm@azstarnet.com>, 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#include "kernel_sysinfo.h" - - - .text - -LEAF(__ieee_get_fp_control, 16) -#ifdef PROF - ldgp gp, 0(pv) - lda sp, -16(sp) - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at - .prologue 1 -#elif defined PIC - lda sp, -16(sp) - .prologue 0 -#else - ldgp gp, 0(pv) - lda sp, -16(sp) - .prologue 1 -#endif - - mov sp, a1 - ldi a0, GSI_IEEE_FP_CONTROL - ldi v0, __NR_osf_getsysinfo - call_pal PAL_callsys - bne a3, $error - - ldq v0, 0(sp) - lda sp, 16(sp) - ret - -$error: - lda sp, 16(sp) - SYSCALL_ERROR_HANDLER - - END(__ieee_get_fp_control) - -libc_hidden_def(__ieee_get_fp_control) -weak_alias (__ieee_get_fp_control, ieee_get_fp_control) diff --git a/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S b/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S deleted file mode 100644 index a9c0891aae..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 1993, 1995, 1996, 1997, 2003, 2004 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger <davidm@azstarnet.com>, 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#include "kernel_sysinfo.h" - - -LEAF(__ieee_set_fp_control, 16) -#ifdef PROF - ldgp gp, 0(pv) - lda sp, -16(sp) - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at - .prologue 1 -#elif defined PIC - lda sp, -16(sp) - .prologue 0 -#else - ldgp gp, 0(pv) - lda sp, -16(sp) - .prologue 1 -#endif - - stq a0, 0(sp) - mov sp, a1 - ldi a0, SSI_IEEE_FP_CONTROL - ldi v0, __NR_osf_setsysinfo - call_pal PAL_callsys - - bne a3, $error - - lda sp, 16(sp) - ret - -$error: - lda sp, 16(sp) - SYSCALL_ERROR_HANDLER - - END(__ieee_set_fp_control) - -libc_hidden_def(__ieee_set_fp_control) -weak_alias (__ieee_set_fp_control, ieee_set_fp_control) diff --git a/sysdeps/unix/sysv/linux/alpha/ioperm.c b/sysdeps/unix/sysv/linux/alpha/ioperm.c deleted file mode 100644 index 32e96ec2f2..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/ioperm.c +++ /dev/null @@ -1,883 +0,0 @@ -/* Copyright (C) 1992, 1996-1999, 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* I/O access is restricted to ISA port space (ports 0..65535). - Modern devices hopefully are sane enough not to put any performance - critical registers in i/o space. - - On the first call to ioperm, the entire (E)ISA port space is mapped - into the virtual address space at address io.base. mprotect calls - are then used to enable/disable access to ports. Per page, there - are PAGE_SIZE>>IO_SHIFT I/O ports (e.g., 256 ports on a Low Cost Alpha - based system using 8KB pages). - - Keep in mind that this code should be able to run in a 32bit address - space. It is therefore unreasonable to expect mmap'ing the entire - sparse address space would work (e.g., the Low Cost Alpha chip has an - I/O address space that's 512MB large!). */ - -/* Make sure the ldbu/stb asms below are not expaneded to macros. */ -#ifndef __alpha_bwx__ -asm(".arch ev56"); -#endif - -#include <errno.h> -#include <fcntl.h> -#include <stdio.h> -#include <ctype.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#include <sys/types.h> -#include <sys/mman.h> -#include <sys/io.h> - -#include <sysdep.h> -#include <sys/syscall.h> - -#define PATH_ALPHA_SYSTYPE "/etc/alpha_systype" -#define PATH_CPUINFO "/proc/cpuinfo" - -#define MAX_PORT 0x10000 -#define vip volatile int * -#define vuip volatile unsigned int * -#define vusp volatile unsigned short * -#define vucp volatile unsigned char * - -#define JENSEN_IO_BASE (0x300000000UL) -#define JENSEN_SPARSE_MEM (0x200000000UL) - -/* With respect to the I/O architecture, APECS and LCA are identical, - so the following defines apply to LCA as well. */ -#define APECS_IO_BASE (0x1c0000000UL) -#define APECS_SPARSE_MEM (0x200000000UL) -#define APECS_DENSE_MEM (0x300000000UL) - -/* The same holds for CIA and PYXIS, except for PYXIS we prefer BWX. */ -#define CIA_IO_BASE (0x8580000000UL) -#define CIA_SPARSE_MEM (0x8000000000UL) -#define CIA_DENSE_MEM (0x8600000000UL) - -#define PYXIS_IO_BASE (0x8900000000UL) -#define PYXIS_DENSE_MEM (0x8800000000UL) - -/* SABLE is EV4, GAMMA is EV5 */ -#define T2_IO_BASE (0x3a0000000UL) -#define T2_SPARSE_MEM (0x200000000UL) -#define T2_DENSE_MEM (0x3c0000000UL) - -#define GAMMA_IO_BASE (0x83a0000000UL) -#define GAMMA_SPARSE_MEM (0x8200000000UL) -#define GAMMA_DENSE_MEM (0x83c0000000UL) - -/* NOTE: these are hardwired to PCI bus 0 addresses!!! */ -#define MCPCIA_IO_BASE (0xf980000000UL) -#define MCPCIA_SPARSE_MEM (0xf800000000UL) -#define MCPCIA_DENSE_MEM (0xf900000000UL) - -/* Tsunami and Irongate use the same offsets, at least for hose 0. */ -#define TSUNAMI_IO_BASE (0x801fc000000UL) -#define TSUNAMI_DENSE_MEM (0x80000000000UL) - -/* Polaris has SPARSE space, but we prefer to use only DENSE - because of some idiosyncracies in actually using SPARSE. */ -#define POLARIS_IO_BASE (0xf9fc000000UL) -#define POLARIS_DENSE_MEM (0xf900000000UL) - -typedef enum { - IOSYS_UNKNOWN, IOSYS_JENSEN, IOSYS_APECS, IOSYS_CIA, IOSYS_PYXIS, IOSYS_T2, - IOSYS_TSUNAMI, IOSYS_MCPCIA, IOSYS_GAMMA, IOSYS_POLARIS, - IOSYS_CPUDEP, IOSYS_PCIDEP -} iosys_t; - -typedef enum { - IOSWIZZLE_JENSEN, IOSWIZZLE_SPARSE, IOSWIZZLE_DENSE -} ioswizzle_t; - -static struct io_system { - unsigned long int bus_memory_base; - unsigned long int sparse_bus_mem_base; - unsigned long int bus_io_base; -} io_system[] = { /* NOTE! must match iosys_t enumeration */ -/* UNKNOWN */ {0, 0, 0}, -/* JENSEN */ {0, JENSEN_SPARSE_MEM, JENSEN_IO_BASE}, -/* APECS */ {APECS_DENSE_MEM, APECS_SPARSE_MEM, APECS_IO_BASE}, -/* CIA */ {CIA_DENSE_MEM, CIA_SPARSE_MEM, CIA_IO_BASE}, -/* PYXIS */ {PYXIS_DENSE_MEM, 0, PYXIS_IO_BASE}, -/* T2 */ {T2_DENSE_MEM, T2_SPARSE_MEM, T2_IO_BASE}, -/* TSUNAMI */ {TSUNAMI_DENSE_MEM, 0, TSUNAMI_IO_BASE}, -/* MCPCIA */ {MCPCIA_DENSE_MEM, MCPCIA_SPARSE_MEM, MCPCIA_IO_BASE}, -/* GAMMA */ {GAMMA_DENSE_MEM, GAMMA_SPARSE_MEM, GAMMA_IO_BASE}, -/* POLARIS */ {POLARIS_DENSE_MEM, 0, POLARIS_IO_BASE}, -/* CPUDEP */ {0, 0, 0}, /* for platforms dependent on CPU type */ -/* PCIDEP */ {0, 0, 0}, /* for platforms dependent on core logic */ -}; - -static struct platform { - const char *name; - iosys_t io_sys; -} platform[] = { - {"Alcor", IOSYS_CIA}, - {"Avanti", IOSYS_APECS}, - {"Cabriolet", IOSYS_APECS}, - {"EB164", IOSYS_PCIDEP}, - {"EB64+", IOSYS_APECS}, - {"EB66", IOSYS_APECS}, - {"EB66P", IOSYS_APECS}, - {"Jensen", IOSYS_JENSEN}, - {"Miata", IOSYS_PYXIS}, - {"Mikasa", IOSYS_CPUDEP}, - {"Nautilus", IOSYS_TSUNAMI}, - {"Noname", IOSYS_APECS}, - {"Noritake", IOSYS_CPUDEP}, - {"Rawhide", IOSYS_MCPCIA}, - {"Ruffian", IOSYS_PYXIS}, - {"Sable", IOSYS_CPUDEP}, - {"Takara", IOSYS_CIA}, - {"Tsunami", IOSYS_TSUNAMI}, - {"XL", IOSYS_APECS}, -}; - -struct ioswtch { - void (*sethae)(unsigned long int addr); - void (*outb)(unsigned char b, unsigned long int port); - void (*outw)(unsigned short b, unsigned long int port); - void (*outl)(unsigned int b, unsigned long int port); - unsigned int (*inb)(unsigned long int port); - unsigned int (*inw)(unsigned long int port); - unsigned int (*inl)(unsigned long int port); -}; - -static struct { - unsigned long int hae_cache; - unsigned long int base; - struct ioswtch * swp; - unsigned long int bus_memory_base; - unsigned long int sparse_bus_memory_base; - unsigned long int io_base; - ioswizzle_t swiz; -} io; - -static inline void -stb_mb(unsigned char val, unsigned long addr) -{ - __asm__("stb %1,%0; mb" : "=m"(*(vucp)addr) : "r"(val)); -} - -static inline void -stw_mb(unsigned short val, unsigned long addr) -{ - __asm__("stw %1,%0; mb" : "=m"(*(vusp)addr) : "r"(val)); -} - -static inline void -stl_mb(unsigned int val, unsigned long addr) -{ - __asm__("stl %1,%0; mb" : "=m"(*(vip)addr) : "r"(val)); -} - -/* No need to examine error -- sethae never fails. */ -static inline void -__sethae(unsigned long value) -{ - register unsigned long r16 __asm__("$16") = value; - register unsigned long r0 __asm__("$0") = __NR_sethae; - __asm__ __volatile__ ("callsys" - : "=r"(r0) - : "0"(r0), "r" (r16) - : inline_syscall_clobbers, "$19"); -} - -extern long __pciconfig_iobase(enum __pciconfig_iobase_which __which, - unsigned long int __bus, - unsigned long int __dfn); - -static inline unsigned long int -port_to_cpu_addr (unsigned long int port, ioswizzle_t ioswiz, int size) -{ - if (ioswiz == IOSWIZZLE_SPARSE) - return io.base + (port << 5) + ((size - 1) << 3); - else if (ioswiz == IOSWIZZLE_DENSE) - return port + io.base; - else - return io.base + (port << 7) + ((size - 1) << 5); -} - -static inline void -inline_sethae (unsigned long int addr, ioswizzle_t ioswiz) -{ - if (ioswiz == IOSWIZZLE_SPARSE) - { - unsigned long int msb; - - /* no need to set hae if msb is 0: */ - msb = addr & 0xf8000000; - if (msb && msb != io.hae_cache) - { - io.hae_cache = msb; - __sethae (msb); - } - } - else if (ioswiz == IOSWIZZLE_JENSEN) - { - /* HAE on the Jensen is bits 31:25 shifted right. */ - addr >>= 25; - if (addr != io.hae_cache) - { - io.hae_cache = addr; - __sethae (addr); - } - } -} - -static inline void -inline_outb (unsigned char b, unsigned long int port, ioswizzle_t ioswiz) -{ - unsigned int w; - unsigned long int addr = port_to_cpu_addr (port, ioswiz, 1); - - asm ("insbl %2,%1,%0" : "=r" (w) : "ri" (port & 0x3), "r" (b)); - stl_mb(w, addr); -} - - -static inline void -inline_outw (unsigned short int b, unsigned long int port, ioswizzle_t ioswiz) -{ - unsigned long w; - unsigned long int addr = port_to_cpu_addr (port, ioswiz, 2); - - asm ("inswl %2,%1,%0" : "=r" (w) : "ri" (port & 0x3), "r" (b)); - stl_mb(w, addr); -} - - -static inline void -inline_outl (unsigned int b, unsigned long int port, ioswizzle_t ioswiz) -{ - unsigned long int addr = port_to_cpu_addr (port, ioswiz, 4); - - stl_mb(b, addr); -} - - -static inline unsigned int -inline_inb (unsigned long int port, ioswizzle_t ioswiz) -{ - unsigned long int addr = port_to_cpu_addr (port, ioswiz, 1); - int result; - - result = *(vip) addr; - result >>= (port & 3) * 8; - return 0xffUL & result; -} - - -static inline unsigned int -inline_inw (unsigned long int port, ioswizzle_t ioswiz) -{ - unsigned long int addr = port_to_cpu_addr (port, ioswiz, 2); - int result; - - result = *(vip) addr; - result >>= (port & 3) * 8; - return 0xffffUL & result; -} - - -static inline unsigned int -inline_inl (unsigned long int port, ioswizzle_t ioswiz) -{ - unsigned long int addr = port_to_cpu_addr (port, ioswiz, 4); - - return *(vuip) addr; -} - -/* - * Now define the inline functions for CPUs supporting byte/word insns, - * and whose core logic supports I/O space accesses utilizing them. - * - * These routines could be used by MIATA, for example, because it has - * and EV56 plus PYXIS, but it currently uses SPARSE anyway. This is - * also true of RX164 which used POLARIS, but we will choose to use - * these routines in that case instead of SPARSE. - * - * These routines are necessary for TSUNAMI/TYPHOON based platforms, - * which will have (at least) EV6. - */ - -static inline unsigned long int -dense_port_to_cpu_addr (unsigned long int port) -{ - return port + io.base; -} - -static inline void -inline_bwx_outb (unsigned char b, unsigned long int port) -{ - unsigned long int addr = dense_port_to_cpu_addr (port); - stb_mb (b, addr); -} - -static inline void -inline_bwx_outw (unsigned short int b, unsigned long int port) -{ - unsigned long int addr = dense_port_to_cpu_addr (port); - stw_mb (b, addr); -} - -static inline void -inline_bwx_outl (unsigned int b, unsigned long int port) -{ - unsigned long int addr = dense_port_to_cpu_addr (port); - stl_mb (b, addr); -} - -static inline unsigned int -inline_bwx_inb (unsigned long int port) -{ - unsigned long int addr = dense_port_to_cpu_addr (port); - unsigned char r; - - __asm__ ("ldbu %0,%1" : "=r"(r) : "m"(*(vucp)addr)); - return r; -} - -static inline unsigned int -inline_bwx_inw (unsigned long int port) -{ - unsigned long int addr = dense_port_to_cpu_addr (port); - unsigned short r; - - __asm__ ("ldwu %0,%1" : "=r"(r) : "m"(*(vusp)addr)); - return r; -} - -static inline unsigned int -inline_bwx_inl (unsigned long int port) -{ - unsigned long int addr = dense_port_to_cpu_addr (port); - - return *(vuip) addr; -} - -/* macros to define routines with appropriate names and functions */ - -/* these do either SPARSE or JENSEN swizzle */ - -#define DCL_SETHAE(name, ioswiz) \ -static void \ -name##_sethae (unsigned long int addr) \ -{ \ - inline_sethae (addr, IOSWIZZLE_##ioswiz); \ -} - -#define DCL_OUT(name, func, type, ioswiz) \ -static void \ -name##_##func (unsigned type b, unsigned long int addr) \ -{ \ - inline_##func (b, addr, IOSWIZZLE_##ioswiz); \ -} - -#define DCL_IN(name, func, ioswiz) \ -static unsigned int \ -name##_##func (unsigned long int addr) \ -{ \ - return inline_##func (addr, IOSWIZZLE_##ioswiz); \ -} - -/* these do DENSE, so no swizzle is needed */ - -#define DCL_OUT_BWX(name, func, type) \ -static void \ -name##_##func (unsigned type b, unsigned long int addr) \ -{ \ - inline_bwx_##func (b, addr); \ -} - -#define DCL_IN_BWX(name, func) \ -static unsigned int \ -name##_##func (unsigned long int addr) \ -{ \ - return inline_bwx_##func (addr); \ -} - -/* now declare/define the necessary routines */ - -DCL_SETHAE(jensen, JENSEN) -DCL_OUT(jensen, outb, char, JENSEN) -DCL_OUT(jensen, outw, short int, JENSEN) -DCL_OUT(jensen, outl, int, JENSEN) -DCL_IN(jensen, inb, JENSEN) -DCL_IN(jensen, inw, JENSEN) -DCL_IN(jensen, inl, JENSEN) - -DCL_SETHAE(sparse, SPARSE) -DCL_OUT(sparse, outb, char, SPARSE) -DCL_OUT(sparse, outw, short int, SPARSE) -DCL_OUT(sparse, outl, int, SPARSE) -DCL_IN(sparse, inb, SPARSE) -DCL_IN(sparse, inw, SPARSE) -DCL_IN(sparse, inl, SPARSE) - -DCL_SETHAE(dense, DENSE) -DCL_OUT_BWX(dense, outb, char) -DCL_OUT_BWX(dense, outw, short int) -DCL_OUT_BWX(dense, outl, int) -DCL_IN_BWX(dense, inb) -DCL_IN_BWX(dense, inw) -DCL_IN_BWX(dense, inl) - -/* define the "swizzle" switch */ -static struct ioswtch ioswtch[] = { - { - jensen_sethae, - jensen_outb, jensen_outw, jensen_outl, - jensen_inb, jensen_inw, jensen_inl - }, - { - sparse_sethae, - sparse_outb, sparse_outw, sparse_outl, - sparse_inb, sparse_inw, sparse_inl - }, - { - dense_sethae, - dense_outb, dense_outw, dense_outl, - dense_inb, dense_inw, dense_inl - } -}; - -#undef DEBUG_IOPERM - -/* Routine to process the /proc/cpuinfo information into the fields - that are required for correctly determining the platform parameters. */ - -struct cpuinfo_data -{ - char systype[256]; /* system type field */ - char sysvari[256]; /* system variation field */ - char cpumodel[256]; /* cpu model field */ -}; - -static inline int -process_cpuinfo(struct cpuinfo_data *data) -{ - int got_type, got_vari, got_model; - char dummy[256]; - FILE * fp; - int n; - - data->systype[0] = 0; - data->sysvari[0] = 0; - data->cpumodel[0] = 0; - - /* If there's an /etc/alpha_systype link, we're intending to override - whatever's in /proc/cpuinfo. */ - n = __readlink (PATH_ALPHA_SYSTYPE, data->systype, 256 - 1); - if (n > 0) - { - data->systype[n] = '\0'; - return 1; - } - - fp = fopen (PATH_CPUINFO, "r"); - if (!fp) - return 0; - - got_type = got_vari = got_model = 0; - - while (1) - { - if (fgets (dummy, 256, fp) == NULL) - break; - if (!got_type && - sscanf (dummy, "system type : %256[^\n]\n", data->systype) == 1) - got_type = 1; - if (!got_vari && - sscanf (dummy, "system variation : %256[^\n]\n", data->sysvari) == 1) - got_vari = 1; - if (!got_model && - sscanf (dummy, "cpu model : %256[^\n]\n", data->cpumodel) == 1) - got_model = 1; - } - - fclose (fp); - -#ifdef DEBUG_IOPERM - fprintf(stderr, "system type: `%s'\n", data->systype); - fprintf(stderr, "system vari: `%s'\n", data->sysvari); - fprintf(stderr, "cpu model: `%s'\n", data->cpumodel); -#endif - - return got_type + got_vari + got_model; -} - - -/* - * Initialize I/O system. - */ -static int -init_iosys (void) -{ - long addr; - int i, olderrno = errno; - struct cpuinfo_data data; - - /* First try the pciconfig_iobase syscall added to 2.2.15 and 2.3.99. */ - -#ifdef __NR_pciconfig_iobase - addr = __pciconfig_iobase (IOBASE_DENSE_MEM, 0, 0); - if (addr != -1) - { - ioswizzle_t io_swiz; - - if (addr == 0) - { - /* Only Jensen doesn't have dense mem space. */ - io.sparse_bus_memory_base - = io_system[IOSYS_JENSEN].sparse_bus_mem_base; - io.io_base = io_system[IOSYS_JENSEN].bus_io_base; - io_swiz = IOSWIZZLE_JENSEN; - } - else - { - io.bus_memory_base = addr; - - addr = __pciconfig_iobase (IOBASE_DENSE_IO, 0, 0); - if (addr != 0) - { - /* The X server uses _bus_base_sparse == 0 to know that - BWX access are supported to dense mem space. This is - true of every system that supports dense io space, so - never fill in io.sparse_bus_memory_base in this case. */ - io_swiz = IOSWIZZLE_DENSE; - io.io_base = addr; - } - else - { - io.sparse_bus_memory_base - = __pciconfig_iobase (IOBASE_SPARSE_MEM, 0, 0); - io.io_base = __pciconfig_iobase (IOBASE_SPARSE_IO, 0, 0); - io_swiz = IOSWIZZLE_SPARSE; - } - } - - io.swiz = io_swiz; - io.swp = &ioswtch[io_swiz]; - - return 0; - } -#endif - - /* Second, collect the contents of /etc/alpha_systype or /proc/cpuinfo. */ - - if (process_cpuinfo(&data) == 0) - { - /* This can happen if the format of /proc/cpuinfo changes. */ - fprintf (stderr, - "ioperm.init_iosys: Unable to determine system type.\n" - "\t(May need " PATH_ALPHA_SYSTYPE " symlink?)\n"); - __set_errno (ENODEV); - return -1; - } - - /* Translate systype name into i/o system. */ - for (i = 0; i < sizeof (platform) / sizeof (platform[0]); ++i) - { - if (strcmp (platform[i].name, data.systype) == 0) - { - iosys_t io_sys = platform[i].io_sys; - - /* Some platforms can have either EV4 or EV5 CPUs. */ - if (io_sys == IOSYS_CPUDEP) - { - /* SABLE or MIKASA or NORITAKE so far. */ - if (strcmp (platform[i].name, "Sable") == 0) - { - if (strncmp (data.cpumodel, "EV4", 3) == 0) - io_sys = IOSYS_T2; - else if (strncmp (data.cpumodel, "EV5", 3) == 0) - io_sys = IOSYS_GAMMA; - } - else - { - /* This covers MIKASA/NORITAKE. */ - if (strncmp (data.cpumodel, "EV4", 3) == 0) - io_sys = IOSYS_APECS; - else if (strncmp (data.cpumodel, "EV5", 3) == 0) - io_sys = IOSYS_CIA; - } - if (io_sys == IOSYS_CPUDEP) - { - /* This can happen if the format of /proc/cpuinfo changes.*/ - fprintf (stderr, "ioperm.init_iosys: Unable to determine" - " CPU model.\n"); - __set_errno (ENODEV); - return -1; - } - } - /* Some platforms can have different core logic chipsets */ - if (io_sys == IOSYS_PCIDEP) - { - /* EB164 so far */ - if (strcmp (data.systype, "EB164") == 0) - { - if (strncmp (data.sysvari, "RX164", 5) == 0) - io_sys = IOSYS_POLARIS; - else if (strncmp (data.sysvari, "LX164", 5) == 0 - || strncmp (data.sysvari, "SX164", 5) == 0) - io_sys = IOSYS_PYXIS; - else - io_sys = IOSYS_CIA; - } - if (io_sys == IOSYS_PCIDEP) - { - /* This can happen if the format of /proc/cpuinfo changes.*/ - fprintf (stderr, "ioperm.init_iosys: Unable to determine" - " core logic chipset.\n"); - __set_errno (ENODEV); - return -1; - } - } - io.bus_memory_base = io_system[io_sys].bus_memory_base; - io.sparse_bus_memory_base = io_system[io_sys].sparse_bus_mem_base; - io.io_base = io_system[io_sys].bus_io_base; - - if (io_sys == IOSYS_JENSEN) - io.swiz = IOSWIZZLE_JENSEN; - else if (io_sys == IOSYS_TSUNAMI - || io_sys == IOSYS_POLARIS - || io_sys == IOSYS_PYXIS) - io.swiz = IOSWIZZLE_DENSE; - else - io.swiz = IOSWIZZLE_SPARSE; - io.swp = &ioswtch[io.swiz]; - - __set_errno (olderrno); - return 0; - } - } - - __set_errno (ENODEV); - fprintf(stderr, "ioperm.init_iosys: Platform not recognized.\n" - "\t(May need " PATH_ALPHA_SYSTYPE " symlink?)\n"); - return -1; -} - - -int -_ioperm (unsigned long int from, unsigned long int num, int turn_on) -{ - unsigned long int addr, len, pagesize = __getpagesize(); - int prot; - - if (!io.swp && init_iosys() < 0) - { -#ifdef DEBUG_IOPERM - fprintf(stderr, "ioperm: init_iosys() failed (%m)\n"); -#endif - return -1; - } - - /* This test isn't as silly as it may look like; consider overflows! */ - if (from >= MAX_PORT || from + num > MAX_PORT) - { - __set_errno (EINVAL); -#ifdef DEBUG_IOPERM - fprintf(stderr, "ioperm: from/num out of range\n"); -#endif - return -1; - } - -#ifdef DEBUG_IOPERM - fprintf(stderr, "ioperm: turn_on %d io.base %ld\n", turn_on, io.base); -#endif - - if (turn_on) - { - if (!io.base) - { - int fd; - - io.hae_cache = 0; - if (io.swiz != IOSWIZZLE_DENSE) - { - /* Synchronize with hw. */ - __sethae (0); - } - - fd = __open ("/dev/mem", O_RDWR); - if (fd < 0) - { -#ifdef DEBUG_IOPERM - fprintf(stderr, "ioperm: /dev/mem open failed (%m)\n"); -#endif - return -1; - } - - addr = port_to_cpu_addr (0, io.swiz, 1); - len = port_to_cpu_addr (MAX_PORT, io.swiz, 1) - addr; - io.base = - (unsigned long int) __mmap (0, len, PROT_NONE, MAP_SHARED, - fd, io.io_base); - __close (fd); -#ifdef DEBUG_IOPERM - fprintf(stderr, "ioperm: mmap of len 0x%lx returned 0x%lx\n", - len, io.base); -#endif - if ((long) io.base == -1) - return -1; - } - prot = PROT_READ | PROT_WRITE; - } - else - { - if (!io.base) - return 0; /* never was turned on... */ - - /* turnoff access to relevant pages: */ - prot = PROT_NONE; - } - addr = port_to_cpu_addr (from, io.swiz, 1); - addr &= ~(pagesize - 1); - len = port_to_cpu_addr (from + num, io.swiz, 1) - addr; - return __mprotect ((void *) addr, len, prot); -} - - -int -_iopl (int level) -{ - switch (level) - { - case 0: - return 0; - - case 1: case 2: case 3: - return _ioperm (0, MAX_PORT, 1); - - default: - __set_errno (EINVAL); - return -1; - } -} - - -void -_sethae (unsigned long int addr) -{ - if (!io.swp && init_iosys () < 0) - return; - - io.swp->sethae (addr); -} - - -void -_outb (unsigned char b, unsigned long int port) -{ - if (port >= MAX_PORT) - return; - - io.swp->outb (b, port); -} - - -void -_outw (unsigned short b, unsigned long int port) -{ - if (port >= MAX_PORT) - return; - - io.swp->outw (b, port); -} - - -void -_outl (unsigned int b, unsigned long int port) -{ - if (port >= MAX_PORT) - return; - - io.swp->outl (b, port); -} - - -unsigned int -_inb (unsigned long int port) -{ - return io.swp->inb (port); -} - - -unsigned int -_inw (unsigned long int port) -{ - return io.swp->inw (port); -} - - -unsigned int -_inl (unsigned long int port) -{ - return io.swp->inl (port); -} - - -unsigned long int -_bus_base(void) -{ - if (!io.swp && init_iosys () < 0) - return -1; - return io.bus_memory_base; -} - -unsigned long int -_bus_base_sparse(void) -{ - if (!io.swp && init_iosys () < 0) - return -1; - return io.sparse_bus_memory_base; -} - -int -_hae_shift(void) -{ - if (!io.swp && init_iosys () < 0) - return -1; - if (io.swiz == IOSWIZZLE_JENSEN) - return 7; - if (io.swiz == IOSWIZZLE_SPARSE) - return 5; - return 0; -} - -weak_alias (_sethae, sethae); -weak_alias (_ioperm, ioperm); -weak_alias (_iopl, iopl); -weak_alias (_inb, inb); -weak_alias (_inw, inw); -weak_alias (_inl, inl); -weak_alias (_outb, outb); -weak_alias (_outw, outw); -weak_alias (_outl, outl); -weak_alias (_bus_base, bus_base); -weak_alias (_bus_base_sparse, bus_base_sparse); -weak_alias (_hae_shift, hae_shift); diff --git a/sysdeps/unix/sysv/linux/alpha/ipc_priv.h b/sysdeps/unix/sysv/linux/alpha/ipc_priv.h deleted file mode 100644 index 0328dc08e2..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/ipc_priv.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 1995-1999, 2000, 2003 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sys/ipc.h> - -#define __IPC_64 0x100 - -struct __old_ipc_perm -{ - __key_t __key; /* Key. */ - unsigned int uid; /* Owner's user ID. */ - unsigned int gid; /* Owner's group ID. */ - unsigned int cuid; /* Creator's user ID. */ - unsigned int cgid; /* Creator's group ID. */ - unsigned int mode; /* Read/write permission. */ - unsigned short int __seq; /* Sequence number. */ -}; - - -/* The codes for the functions to use the ipc syscall multiplexer. */ -#define IPCOP_semop 1 -#define IPCOP_semget 2 -#define IPCOP_semctl 3 -#define IPCOP_semtimedop 4 -#define IPCOP_msgsnd 11 -#define IPCOP_msgrcv 12 -#define IPCOP_msgget 13 -#define IPCOP_msgctl 14 -#define IPCOP_shmat 21 -#define IPCOP_shmdt 22 -#define IPCOP_shmget 23 -#define IPCOP_shmctl 24 diff --git a/sysdeps/unix/sysv/linux/alpha/kernel_sigaction.h b/sysdeps/unix/sysv/linux/alpha/kernel_sigaction.h deleted file mode 100644 index 4c35d969cf..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/kernel_sigaction.h +++ /dev/null @@ -1,15 +0,0 @@ -/* This is the sigaction struction from the Linux 2.1.20 kernel. */ - -struct old_kernel_sigaction { - __sighandler_t k_sa_handler; - unsigned long sa_mask; - unsigned int sa_flags; -}; - -/* This is the sigaction structure from the Linux 2.1.68 kernel. */ - -struct kernel_sigaction { - __sighandler_t k_sa_handler; - unsigned int sa_flags; - sigset_t sa_mask; -}; diff --git a/sysdeps/unix/sysv/linux/alpha/kernel_stat.h b/sysdeps/unix/sysv/linux/alpha/kernel_stat.h deleted file mode 100644 index a1d012ab01..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/kernel_stat.h +++ /dev/null @@ -1,88 +0,0 @@ -/* Definition of `struct stat' used in the kernel. */ -struct kernel_stat - { - unsigned int st_dev; - unsigned int st_ino; - unsigned int st_mode; - unsigned int st_nlink; - unsigned int st_uid; - unsigned int st_gid; - unsigned int st_rdev; - long int st_size; - unsigned long int st_atime; - unsigned long int st_mtime; - unsigned long int st_ctime; - unsigned int st_blksize; - int st_blocks; - unsigned int st_flags; - unsigned int st_gen; - }; - -/* Definition of `struct stat64' used in the kernel. */ -struct kernel_stat64 - { - unsigned long st_dev; - unsigned long st_ino; - unsigned long st_rdev; - long st_size; - unsigned long st_blocks; - - unsigned int st_mode; - unsigned int st_uid; - unsigned int st_gid; - unsigned int st_blksize; - unsigned int st_nlink; - unsigned int __pad0; - - unsigned long st_atime; - unsigned long st_atimensec; - unsigned long st_mtime; - unsigned long st_mtimensec; - unsigned long st_ctime; - unsigned long st_ctimensec; - long __unused[3]; - }; - -/* Definition of `struct stat' used by glibc 2.0. */ -struct glibc2_stat - { - __dev_t st_dev; - __ino_t st_ino; - __mode_t st_mode; - __nlink_t st_nlink; - __uid_t st_uid; - __gid_t st_gid; - __dev_t st_rdev; - __off_t st_size; - __time_t st_atime; - __time_t st_mtime; - __time_t st_ctime; - unsigned int st_blksize; - int st_blocks; - unsigned int st_flags; - unsigned int st_gen; - }; - -/* Definition of `struct stat' used by glibc 2.1. */ -struct glibc21_stat - { - __dev_t st_dev; - __ino64_t st_ino; - __mode_t st_mode; - __nlink_t st_nlink; - __uid_t st_uid; - __gid_t st_gid; - __dev_t st_rdev; - __off_t st_size; - __time_t st_atime; - __time_t st_mtime; - __time_t st_ctime; - __blkcnt64_t st_blocks; - __blksize_t st_blksize; - unsigned int st_flags; - unsigned int st_gen; - int __pad3; - long __unused[4]; - }; - -#define XSTAT_IS_XSTAT64 1 diff --git a/sysdeps/unix/sysv/linux/alpha/kernel_sysinfo.h b/sysdeps/unix/sysv/linux/alpha/kernel_sysinfo.h deleted file mode 100644 index a3edec2269..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/kernel_sysinfo.h +++ /dev/null @@ -1,6 +0,0 @@ -/* A copy of the couple of bits we need from <asm/sysinfo.h>. */ - -#define GSI_IEEE_FP_CONTROL 45 - -#define SSI_IEEE_FP_CONTROL 14 -#define SSI_IEEE_RAISE_EXCEPTION 1001 diff --git a/sysdeps/unix/sysv/linux/alpha/kernel_termios.h b/sysdeps/unix/sysv/linux/alpha/kernel_termios.h deleted file mode 100644 index c38f1fac1a..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/kernel_termios.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 1997 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _KERNEL_TERMIOS_H -#define _KERNEL_TERMIOS_H 1 - -/* The following corresponds to the values from the Linux 2.1.20 kernel. */ - -/* We need the definition of tcflag_t, cc_t, and speed_t. */ -#include <termios.h> - -#define __KERNEL_NCCS 19 - -struct __kernel_termios - { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_cc[__KERNEL_NCCS]; /* control characters */ - cc_t c_line; /* line discipline */ - speed_t c_ispeed; /* input speed */ - speed_t c_ospeed; /* output speed */ - }; - -#define _HAVE_C_ISPEED 1 -#define _HAVE_C_OSPEED 1 - -#endif /* kernel_termios.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/lxstat.c b/sysdeps/unix/sysv/linux/alpha/lxstat.c deleted file mode 100644 index 38fac2e2b2..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/lxstat.c +++ /dev/null @@ -1,64 +0,0 @@ -/* lxstat using old-style Unix stat system call. - Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __lxstat64 __lxstat64_disable - -#include <errno.h> -#include <stddef.h> -#include <sys/stat.h> -#include <kernel_stat.h> -#include <sysdep.h> -#include <sys/syscall.h> -#include <xstatconv.h> - -#undef __lxstat64 - - -/* Get information about the file NAME in BUF. */ -int -__lxstat (int vers, const char *name, struct stat *buf) -{ - INTERNAL_SYSCALL_DECL (err); - int result, errno_out; - struct kernel_stat kbuf; - - if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64) - { - result = INTERNAL_SYSCALL (lstat64, err, 2, name, buf); - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return result; - errno_out = INTERNAL_SYSCALL_ERRNO (result, err); - if (errno_out != ENOSYS) - goto fail; - __libc_missing_axp_stat64 = 1; - } - - result = INTERNAL_SYSCALL (lstat, err, 2, name, &kbuf); - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return __xstat_conv (vers, &kbuf, buf); - errno_out = INTERNAL_SYSCALL_ERRNO (result, err); - - fail: - __set_errno (errno_out); - return -1; -} -hidden_def (__lxstat) -weak_alias (__lxstat, _lxstat); -strong_alias (__lxstat, __lxstat64); -hidden_ver (__lxstat, __lxstat64) diff --git a/sysdeps/unix/sysv/linux/alpha/makecontext.S b/sysdeps/unix/sysv/linux/alpha/makecontext.S deleted file mode 100644 index 223117e26d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/makecontext.S +++ /dev/null @@ -1,164 +0,0 @@ -/* Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#include <ucontext-offsets.h> - - -ENTRY(__makecontext) - ldgp $29, 0($27) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - /* Compute top of stack, including arguments. */ - ldq $1, UC_STACK+SS_SP($16) - ldq $2, UC_STACK+SS_SIZE($16) - addq $1, $2, $8 - subq $18, 6, $1 - cmovlt $1, 0, $1 - s8addq $1, 0, $2 - subq $8, $2, $8 - - /* Copy all parameters. Switch statement header here. */ - ldah $3, $jumptable($29) !gprelhigh - cmple $18, 6, $1 - mov $18, $2 - cmoveq $1, 7, $2 - s4addq $2, $3, $3 - ldl $4, $jumptable($3) !gprellow - addq $4, $29, $4 - jmp $31, ($4), $args1 - - .section .rodata - .align 2 -$jumptable: - .gprel32 $args0 - .gprel32 $args1 - .gprel32 $args2 - .gprel32 $args3 - .gprel32 $args4 - .gprel32 $args5 - .gprel32 $args6 - .gprel32 $argsN - .text - - /* Here we process arguments 7 through N. This is a straight - stack-to-stack copy. */ - .align 4 -$argsN: - subq $18, 6, $1 - lda $2, 0($8) - lda $3, 3*8($30) - .align 4 -1: - ldq $0, 0($3) - subq $1, 1, $1 - lda $3, 8($3) - stq $0, 0($2) - lda $2, 8($2) - bne $1, 1b - - /* Here we process arguments 6 through 0. This involves - copying into the register save areas of the ucontext. */ - .align 4 -$args6: - ldq $0, 2*8($30) - stq $0, UC_SIGCTX+SC_REGS+21*8($16) - unop - stq $0, UC_SIGCTX+SC_FPREGS+21*8($16) -$args5: - ldq $0, 1*8($30) - stq $0, UC_SIGCTX+SC_REGS+20*8($16) - unop - stq $0, UC_SIGCTX+SC_FPREGS+20*8($16) -$args4: - ldq $0, 0*8($30) - stq $0, UC_SIGCTX+SC_REGS+19*8($16) - unop - stq $0, UC_SIGCTX+SC_FPREGS+19*8($16) -$args3: - unop - stq $21, UC_SIGCTX+SC_REGS+18*8($16) - unop - stt $f21, UC_SIGCTX+SC_FPREGS+18*8($16) -$args2: - unop - stq $20, UC_SIGCTX+SC_REGS+17*8($16) - unop - stt $f20, UC_SIGCTX+SC_FPREGS+17*8($16) -$args1: - unop - stq $19, UC_SIGCTX+SC_REGS+16*8($16) - unop - stt $f19, UC_SIGCTX+SC_FPREGS+16*8($16) -$args0: - - /* Set up the registers ready to invoke __startcontext. - We seed $27 with the target function address, and $9 - with the link from ucp. */ - ldah $0, __startcontext($29) !gprelhigh - ldq $1, UC_LINK($16) - lda $0, __startcontext($0) !gprellow - stq $17, UC_SIGCTX+SC_REGS+27*8($16) - stq $8, UC_SIGCTX+SC_REGS+30*8($16) - stq $0, UC_SIGCTX+SC_PC($16) - stq $1, UC_SIGCTX+SC_REGS+9*8($16) - - /* No return value from makecontext. */ - ret - -END(__makecontext) -weak_alias (__makecontext, makecontext) - -/* This function is where a new makecontext "thread" begins life. - We have already set up $27 for calling the target function, and - we've set $9 to the UC_LINK of the parent context. - - If the function returns, we either jump to the linked context - (if non-null) or exit. */ - - .align 4 - .ent __startcontext -__startcontext: - .frame $31, 0, $31, 0 - .prologue 0 - - jsr $26, ($27), 0 - ldgp $29, 0($26) - mov $9, $16 - beq $9, 1f - -#ifdef PIC - bsr $26, __setcontext !samegp -1: mov $31, $16 - bsr $26, HIDDEN_JUMPTARGET(exit) !samegp -#else - jsr $26, __setcontext - ldgp $29, 0($26) -1: mov $31, $16 - jsr $26, HIDDEN_JUMPTARGET(exit) -#endif - - halt - - .end __startcontext diff --git a/sysdeps/unix/sysv/linux/alpha/msgctl.c b/sysdeps/unix/sysv/linux/alpha/msgctl.c deleted file mode 100644 index a59911fe40..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/msgctl.c +++ /dev/null @@ -1,121 +0,0 @@ -/* Copyright (C) 1995,1997,1998,2000,2003,2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <sys/msg.h> -#include <ipc_priv.h> - -#include <sysdep.h> -#include <string.h> -#include <sys/syscall.h> -#include <bp-checks.h> - -#include <kernel-features.h> - -struct __old_msqid_ds -{ - struct __old_ipc_perm msg_perm; /* structure describing operation permission */ - struct msg *__unbounded __msg_first; /* pointer to first message on queue */ - struct msg *__unbounded __msg_last; /* pointer to last message on queue */ - __time_t msg_stime; /* time of last msgsnd command */ - __time_t msg_rtime; /* time of last msgrcv command */ - __time_t msg_ctime; /* time of last change */ - struct wait_queue *__unbounded __wwait; /* ??? */ - struct wait_queue *__unbounded __rwait; /* ??? */ - unsigned short int __msg_cbytes; /* current number of bytes on queue */ - unsigned short int msg_qnum; /* number of messages currently on queue */ - unsigned short int msg_qbytes; /* max number of bytes allowed on queue */ - __ipc_pid_t msg_lspid; /* pid of last msgsnd() */ - __ipc_pid_t msg_lrpid; /* pid of last msgrcv() */ -}; - -/* Allows to control internal state and destruction of message queue - objects. */ -int __new_msgctl (int, int, struct msqid_ds *); - -int -__new_msgctl (int msqid, int cmd, struct msqid_ds *buf) -{ - /* This is a misnomer -- Alpha had 32-bit uids at the beginning - of time. However, msg_qnum and msg_qbytes changed size at - the same time the size of uid changed elsewhere. */ -#if __ASSUME_32BITUIDS > 0 - return INLINE_SYSCALL (msgctl, 3, msqid, cmd | __IPC_64, CHECK_1 (buf)); -#else - switch (cmd) { - case MSG_STAT: - case IPC_STAT: - case IPC_SET: - break; - default: - return INLINE_SYSCALL (msgctl, 3, msqid, cmd, CHECK_1 (buf)); - } - - { - int save_errno = errno, result; - struct __old_msqid_ds old; - - /* Unfortunately there is no way how to find out for sure whether - we should use old or new msgctl. */ - result = INLINE_SYSCALL (msgctl, 3, msqid, cmd | __IPC_64, CHECK_1 (buf)); - if (result != -1 || errno != EINVAL) - return result; - - __set_errno(save_errno); - if (cmd == IPC_SET) - { - old.msg_perm.uid = buf->msg_perm.uid; - old.msg_perm.gid = buf->msg_perm.gid; - old.msg_perm.mode = buf->msg_perm.mode; - old.msg_qbytes = buf->msg_qbytes; - if (old.msg_perm.uid != buf->msg_perm.uid || - old.msg_perm.gid != buf->msg_perm.gid || - old.msg_qbytes != buf->msg_qbytes) - { - __set_errno (EINVAL); - return -1; - } - } - result = INLINE_SYSCALL (msgctl, 3, msqid, cmd, __ptrvalue (&old)); - if (result != -1 && cmd != IPC_SET) - { - memset(buf, 0, sizeof(*buf)); - buf->msg_perm.__key = old.msg_perm.__key; - buf->msg_perm.uid = old.msg_perm.uid; - buf->msg_perm.gid = old.msg_perm.gid; - buf->msg_perm.cuid = old.msg_perm.cuid; - buf->msg_perm.cgid = old.msg_perm.cgid; - buf->msg_perm.mode = old.msg_perm.mode; - buf->msg_perm.__seq = old.msg_perm.__seq; - buf->msg_stime = old.msg_stime; - buf->msg_rtime = old.msg_rtime; - buf->msg_ctime = old.msg_ctime; - buf->__msg_cbytes = old.__msg_cbytes; - buf->msg_qnum = old.msg_qnum; - buf->msg_qbytes = old.msg_qbytes; - buf->msg_lspid = old.msg_lspid; - buf->msg_lrpid = old.msg_lrpid; - } - return result; - } -#endif -} - -#include <shlib-compat.h> -versioned_symbol (libc, __new_msgctl, msgctl, GLIBC_2_2); diff --git a/sysdeps/unix/sysv/linux/alpha/nldbl-abi.h b/sysdeps/unix/sysv/linux/alpha/nldbl-abi.h deleted file mode 100644 index bd985cc59c..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/nldbl-abi.h +++ /dev/null @@ -1,8 +0,0 @@ -/* ABI version for long double switch. - This is used by the Versions and math_ldbl_opt.h files in - sysdeps/ieee754/ldbl-opt/. It gives the ABI version where - long double == double was replaced with proper long double - for libm *l functions and libc functions using long double. */ - -#define NLDBL_VERSION GLIBC_2.4 -#define LONG_DOUBLE_COMPAT_VERSION GLIBC_2_4 diff --git a/sysdeps/unix/sysv/linux/alpha/oldglob.c b/sysdeps/unix/sysv/linux/alpha/oldglob.c deleted file mode 100644 index 6d9b79f2c3..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/oldglob.c +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (C) 1998, 2000, 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* This file contains only wrappers around the real glob functions. It - became necessary since the glob_t structure changed. */ -#include <sys/types.h> -#include <glob.h> -#include <shlib-compat.h> - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) - -/* This is the old structure. The difference is that the gl_pathc and - gl_offs elements have type `int'. */ -typedef struct - { - int gl_pathc; /* Count of paths matched by the pattern. */ - char **gl_pathv; /* List of matched pathnames. */ - int gl_offs; /* Slots to reserve in `gl_pathv'. */ - int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */ - - /* If the GLOB_ALTDIRFUNC flag is set, the following functions - are used instead of the normal file access functions. */ - void (*gl_closedir) (void *); - struct dirent *(*gl_readdir) (void *); - __ptr_t (*gl_opendir) (__const char *); - int (*gl_lstat) (__const char *, struct stat *); - int (*gl_stat) (__const char *, struct stat *); - } old_glob_t; - - -int -attribute_compat_text_section -__old_glob (const char *pattern, int flags, - int (*errfunc) (const char *, int), - old_glob_t *pglob) -{ - glob_t correct; - int result; - - /* Construct an object of correct type. */ - correct.gl_pathc = pglob->gl_pathc; - correct.gl_pathv = pglob->gl_pathv; - correct.gl_offs = pglob->gl_offs; - correct.gl_flags = pglob->gl_flags; - correct.gl_closedir = pglob->gl_closedir; - correct.gl_readdir = pglob->gl_readdir; - correct.gl_opendir = pglob->gl_opendir; - correct.gl_lstat = pglob->gl_lstat; - correct.gl_stat = pglob->gl_stat; - - result = glob (pattern, flags, errfunc, &correct); - - /* And convert it back. */ - pglob->gl_pathc = correct.gl_pathc; - pglob->gl_pathv = correct.gl_pathv; - pglob->gl_offs = correct.gl_offs; - pglob->gl_flags = correct.gl_flags; - pglob->gl_closedir = correct.gl_closedir; - pglob->gl_readdir = correct.gl_readdir; - pglob->gl_opendir = correct.gl_opendir; - pglob->gl_lstat = correct.gl_lstat; - pglob->gl_stat = correct.gl_stat; - - return result; -} -compat_symbol (libc, __old_glob, glob, GLIBC_2_0); - - -/* Free storage allocated in PGLOB by a previous `glob' call. */ -void -attribute_compat_text_section -__old_globfree (old_glob_t *pglob) -{ - glob_t correct; - - /* We only need these two symbols. */ - correct.gl_pathc = pglob->gl_pathc; - correct.gl_pathv = pglob->gl_pathv; - correct.gl_offs = pglob->gl_offs; - - globfree (&correct); -} -compat_symbol (libc, __old_globfree, globfree, GLIBC_2_0); - -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/pipe.S b/sysdeps/unix/sysv/linux/alpha/pipe.S deleted file mode 100644 index 1e7ec1c199..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/pipe.S +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/alpha/pipe.S> diff --git a/sysdeps/unix/sysv/linux/alpha/register-dump.h b/sysdeps/unix/sysv/linux/alpha/register-dump.h deleted file mode 100644 index 77f962952a..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/register-dump.h +++ /dev/null @@ -1,157 +0,0 @@ -/* Dump registers. - Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stddef.h> -#include <string.h> - -/* We will print the register dump in this format: - - V0: XXXXXXXXXXXXXXXX T0: XXXXXXXXXXXXXXXX T1: XXXXXXXXXXXXXXXX - T2: XXXXXXXXXXXXXXXX T3: XXXXXXXXXXXXXXXX T4: XXXXXXXXXXXXXXXX - T5: XXXXXXXXXXXXXXXX T6: XXXXXXXXXXXXXXXX T7: XXXXXXXXXXXXXXXX - S0: XXXXXXXXXXXXXXXX S1: XXXXXXXXXXXXXXXX S2: XXXXXXXXXXXXXXXX - S3: XXXXXXXXXXXXXXXX S4: XXXXXXXXXXXXXXXX S5: XXXXXXXXXXXXXXXX - S6: XXXXXXXXXXXXXXXX A0: XXXXXXXXXXXXXXXX A1: XXXXXXXXXXXXXXXX - A2: XXXXXXXXXXXXXXXX A3: XXXXXXXXXXXXXXXX A4: XXXXXXXXXXXXXXXX - A5: XXXXXXXXXXXXXXXX T8: XXXXXXXXXXXXXXXX T9: XXXXXXXXXXXXXXXX - T10: XXXXXXXXXXXXXXXX T11: XXXXXXXXXXXXXXXX RA: XXXXXXXXXXXXXXXX - T12: XXXXXXXXXXXXXXXX AT: XXXXXXXXXXXXXXXX GP: XXXXXXXXXXXXXXXX - SP: XXXXXXXXXXXXXXXX PC: XXXXXXXXXXXXXXXX - - FP0: XXXXXXXXXXXXXXXX FP1: XXXXXXXXXXXXXXXX FP2: XXXXXXXXXXXXXXXX - FP3: XXXXXXXXXXXXXXXX FP4: XXXXXXXXXXXXXXXX FP5: XXXXXXXXXXXXXXXX - FP6: XXXXXXXXXXXXXXXX FP7: XXXXXXXXXXXXXXXX FP8: XXXXXXXXXXXXXXXX - FP9: XXXXXXXXXXXXXXXX FP10: XXXXXXXXXXXXXXXX FP11: XXXXXXXXXXXXXXXX - FP12: XXXXXXXXXXXXXXXX FP13: XXXXXXXXXXXXXXXX FP14: XXXXXXXXXXXXXXXX - FP15: XXXXXXXXXXXXXXXX FP16: XXXXXXXXXXXXXXXX FP17: XXXXXXXXXXXXXXXX - FP18: XXXXXXXXXXXXXXXX FP19: XXXXXXXXXXXXXXXX FP20: XXXXXXXXXXXXXXXX - FP21: XXXXXXXXXXXXXXXX FP22: XXXXXXXXXXXXXXXX FP23: XXXXXXXXXXXXXXXX - FP24: XXXXXXXXXXXXXXXX FP25: XXXXXXXXXXXXXXXX FP26: XXXXXXXXXXXXXXXX - FP27: XXXXXXXXXXXXXXXX FP28: XXXXXXXXXXXXXXXX FP29: XXXXXXXXXXXXXXXX - FP30: XXXXXXXXXXXXXXXX FPCR: XXXXXXXXXXXXXXXX - - TA0: XXXXXXXXXXXXXXXX TA1: XXXXXXXXXXXXXXXX TA2: XXXXXXXXXXXXXXXX -*/ - -#define NREGS (32+32+3) - -static const char __attribute__((aligned(8))) regnames[NREGS][8] = -{ - " V0: ", " T0: ", " T1: ", - " T2: ", " T3: ", " T4: ", - " T5: ", " T6: ", " T7: ", - " S0: ", " S1: ", " S2: ", - " S3: ", " S4: ", " S5: ", - " S6: ", " A0: ", " A1: ", - " A2: ", " A3: ", " A4: ", - " A5: ", " T8: ", " T9: ", - " T10: ", " T11: ", " RA: ", - " T12: ", " AT: ", " GP: ", - " SP: ", " PC: ", - - " FP0: ", " FP1: ", " FP2: ", - " FP3: ", " FP4: ", " FP5: ", - " FP6: ", " FP7: ", " FP8: ", - " FP9: ", " FP10: ", " FP11: ", - " FP12: ", " FP13: ", " FP14: ", - " FP15: ", " FP16: ", " FP17: ", - " FP18: ", " FP19: ", " FP20: ", - " FP21: ", " FP22: ", " FP23: ", - " FP24: ", " FP25: ", " FP26: ", - " FP27: ", " FP28: ", " FP29: ", - " FP30: ", " FPCR: ", - - " TA0: ", " TA1: ", " TA2: " -}; - -#define O(FIELD, LF) offsetof(struct sigcontext, FIELD) + LF - -static const int offsets[NREGS] = -{ - O(sc_regs[0], 0), O(sc_regs[1], 0), O(sc_regs[2], 1), - O(sc_regs[3], 0), O(sc_regs[4], 0), O(sc_regs[5], 1), - O(sc_regs[6], 0), O(sc_regs[7], 0), O(sc_regs[8], 1), - O(sc_regs[9], 0), O(sc_regs[10], 0), O(sc_regs[11], 1), - O(sc_regs[12], 0), O(sc_regs[13], 0), O(sc_regs[14], 1), - O(sc_regs[15], 0), O(sc_regs[16], 0), O(sc_regs[17], 1), - O(sc_regs[18], 0), O(sc_regs[19], 0), O(sc_regs[20], 1), - O(sc_regs[21], 0), O(sc_regs[22], 0), O(sc_regs[23], 1), - O(sc_regs[24], 0), O(sc_regs[25], 0), O(sc_regs[26], 1), - O(sc_regs[27], 0), O(sc_regs[28], 0), O(sc_regs[29], 1), - O(sc_regs[30], 0), O(sc_pc, 2), - - O(sc_fpregs[0], 0), O(sc_fpregs[1], 0), O(sc_fpregs[2], 1), - O(sc_fpregs[3], 0), O(sc_fpregs[4], 0), O(sc_fpregs[5], 1), - O(sc_fpregs[6], 0), O(sc_fpregs[7], 0), O(sc_fpregs[8], 1), - O(sc_fpregs[9], 0), O(sc_fpregs[10], 0), O(sc_fpregs[11], 1), - O(sc_fpregs[12], 0), O(sc_fpregs[13], 0), O(sc_fpregs[14], 1), - O(sc_fpregs[15], 0), O(sc_fpregs[16], 0), O(sc_fpregs[17], 1), - O(sc_fpregs[18], 0), O(sc_fpregs[19], 0), O(sc_fpregs[20], 1), - O(sc_fpregs[21], 0), O(sc_fpregs[22], 0), O(sc_fpregs[23], 1), - O(sc_fpregs[24], 0), O(sc_fpregs[25], 0), O(sc_fpregs[26], 1), - O(sc_fpregs[27], 0), O(sc_fpregs[28], 0), O(sc_fpregs[29], 1), - O(sc_fpregs[30], 0), O(sc_fpcr, 2), - - O(sc_traparg_a0, 0), O(sc_traparg_a1, 0), O(sc_traparg_a2, 1) -}; - -#undef O - -static void -register_dump (int fd, struct sigcontext *ctx) -{ - char buf[NREGS*(8+16) + 25 + 80]; - char *p = buf; - size_t i; - - p = stpcpy (p, "Register dump:\n\n"); - - for (i = 0; i < NREGS; ++i) - { - int this_offset, this_lf; - unsigned long val; - signed long j; - - this_offset = offsets[i]; - this_lf = this_offset & 7; - - val = *(unsigned long *)(((size_t)ctx + this_offset) & -8); - - memcpy (p, regnames[i], 8); - p += 8; - - for (j = 60; j >= 0; j -= 4) - { - unsigned long x = (val >> j) & 15; - x += x < 10 ? '0' : 'a' - 10; - *p++ = x; - } - - if (this_lf > 0) - { - if (this_lf > 1) - *p++ = '\n'; - *p++ = '\n'; - } - } - - write (fd, buf, p - buf); -} - -#define REGISTER_DUMP register_dump (fd, ctx) diff --git a/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S b/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S deleted file mode 100644 index e27949feff..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright (C) 1998, 2003, 2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <rth@cygnus.com>, 1998 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> - -/* On Alpha we desparately want to avoid having to issue an imb. Ordinarily - the kernel would have to issue one after setting up the signal return - stack, but the Linux rt_sigaction syscall is prepared to accept a pointer - to the sigreturn syscall, instead of inlining it on the stack. - - This just about halves signal delivery time. */ - - .text - -ENTRY(__syscall_rt_sigaction) - .frame sp,0,ra,0 - ldgp gp,0(pv) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - beq a1, 0f - ldl t0, 8(a1) # sa_flags - - /* The unwinder will subtract one from the return address when - attempting to find the call instruction that led us here. - Since we didn't get here via a normal call, if we do nothing - we would pick up the wrong symbol and the wrong FDE. Account - for this by adding a nop to the start of the function and - then skipping it here by adding 4. */ - ldah a4, __syscall_sigreturn+4(gp) !gprelhigh - ldah t1, __syscall_rt_sigreturn+4(gp) !gprelhigh - lda a4, __syscall_sigreturn+4(a4) !gprellow - lda t1, __syscall_rt_sigreturn+4(t1) !gprellow - and t0, 0x40, t0 # SA_SIGINFO - cmovne t0, t1, a4 - -0: ldi v0, __NR_rt_sigaction - callsys - bne a3, SYSCALL_ERROR_LABEL - ret - -PSEUDO_END(__syscall_rt_sigaction) - -/* To enable unwinding through the signal frame without special hackery - elsewhere, describe the entire struct sigcontext with unwind info. - - In order to minimize the size of the encoding, we set the CFA to the - end of the sigcontext, which makes all of the registers have small - negative offsets from that. */ - - .macro SIGCONTEXT_REGS_I base, from=0 - cfi_offset (\from, \base + (4 + \from) * 8) - .if 30-\from - SIGCONTEXT_REGS_I \base, "(\from+1)" - .endif - .endm - - .macro SIGCONTEXT_REGS_F base, from=32 - cfi_offset (\from, \base + (4 + 1 + \from) * 8) - .if 62-\from - SIGCONTEXT_REGS_F \base, "(\from+1)" - .endif - .endm - - .macro SIGCONTEXT_REGS base - SIGCONTEXT_REGS_I \base - SIGCONTEXT_REGS_F \base - cfi_offset (63, \base + (4 + 32 + 1 + 32) * 8) - cfi_offset (64, \base + 2 * 8) - .endm - - .align 4 - nop - nop - nop - - cfi_startproc - cfi_return_column (64) - SIGCONTEXT_REGS -648 - - cfi_def_cfa_offset (648) -__syscall_sigreturn: - nop - mov sp, a0 - ldi v0, __NR_sigreturn - callsys - .size __syscall_sigreturn, .-__syscall_sigreturn - .type __syscall_sigreturn, @function - - cfi_def_cfa_offset (176 + 648) -__syscall_rt_sigreturn: - nop - mov sp,a0 - ldi v0,__NR_rt_sigreturn - callsys - .size __syscall_rt_sigreturn, .-__syscall_rt_sigreturn - .type __syscall_rt_sigreturn, @function - - cfi_endproc diff --git a/sysdeps/unix/sysv/linux/alpha/select.S b/sysdeps/unix/sysv/linux/alpha/select.S deleted file mode 100644 index 35a81e949f..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/select.S +++ /dev/null @@ -1,241 +0,0 @@ -/* Copyright (C) 1998,2002,2003,2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep-cancel.h> -#define _ERRNO_H 1 -#include <bits/errno.h> -#include <kernel-features.h> - -.text - -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING -#define SELECT __select_tv64 -#else -#define SELECT __select -#endif - -#if defined __ASSUME_TIMEVAL64 -PSEUDO(SELECT, select, 5) - ret -PSEUDO_END(SELECT) -#else -/* The problem here is that initially we made struct timeval compatible with - OSF/1, using int32. But we defined time_t with uint64, and later found - that POSIX requires tv_sec to be time_t. - - So now we have to do compatibility stuff. */ - -/* The variable is shared between all wrappers around signal handling - functions which have RT equivalents. */ -.comm __libc_missing_axp_tv64, 4 - -LEAF(SELECT, 64) - ldgp gp, 0(pv) - subq sp, 64, sp -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - stq ra, 40(sp) - .mask 0x4000000, 40-64 - .prologue 1 - -#ifdef CENABLE - SINGLE_THREAD_P (t1) -#else - ldl t0, __libc_missing_axp_tv64 -#endif - - /* Save timeout early, since we'll need to recover this after - the system call. */ - stq a4, 48(sp) - -#ifdef CENABLE - bne t1, $do_cancel -#endif - - bne t0, $do32 - - /* Save arguments in case we do need to fall back. */ - stq a0, 8(sp) - stq a1, 16(sp) - stq a2, 24(sp) - stq a3, 32(sp) - - ldi v0, SYS_ify(select) - callsys - bne a3, $err64 - - /* Everything ok. */ - addq sp, 64, sp - ret - - /* If we didn't get ENOSYS, it is a real error. */ - .align 3 -$err64: cmpeq v0, ENOSYS, t0 - beq t0, $error - stl t0, __libc_missing_axp_tv64 - - /* Recover the saved arguments. */ - ldq a4, 48(sp) - ldq a3, 32(sp) - ldq a2, 24(sp) - ldq a1, 16(sp) - ldq a0, 8(sp) - - .align 3 -$do32: - /* If the timeout argument is present bounce to the smaller fmt. */ - beq a4, 1f - ldq t0, 0(a4) - ldq t1, 8(a4) - stl t0, 0(sp) - stl t1, 4(sp) - mov sp, a4 - -1: ldi v0, SYS_ify(osf_select) - callsys - bne a3, $error - - /* ... and bounce the remaining timeout back. */ - ldq a4, 48(sp) - beq a4, 2f - ldl t0, 0(sp) - ldl t1, 4(sp) - stq t0, 0(a4) - stq t1, 8(a4) - -2: addq sp, 64, sp - ret - -#ifdef CENABLE - .align 3 -$do_cancel: - /* Save arguments. */ - stq a0, 8(sp) - stq a1, 16(sp) - stq a2, 24(sp) - stq a3, 32(sp) - - CENABLE - mov v0, ra - - ldl t0, __libc_missing_axp_tv64 - bne t0, $do_cancel32 - - /* Recover the saved arguments. */ - ldq a4, 48(sp) - ldq a3, 32(sp) - ldq a2, 24(sp) - ldq a1, 16(sp) - ldq a0, 8(sp) - - ldi v0, SYS_ify(select) - callsys - - mov ra, a0 - bne a3, $cancel_err64 - - stq v0, 8(sp) - CDISABLE - ldq v0, 8(sp) - ldq ra, 40(sp) - - /* Everything ok. */ - addq sp, 64, sp - ret - - /* If we didn't get ENOSYS, it is a real error. */ - .align 3 -$cancel_err64: - cmpeq v0, ENOSYS, t0 - beq t0, $cancel_error - stl t0, __libc_missing_axp_tv64 - - /* Recover the saved arguments. */ - .align 3 -$do_cancel32: - ldq a4, 48(sp) - ldq a3, 32(sp) - ldq a2, 24(sp) - ldq a1, 16(sp) - ldq a0, 8(sp) - - /* If the timeout argument is present bounce to the smaller fmt. */ - beq a4, 1f - ldq t0, 0(a4) - ldq t1, 8(a4) - stl t0, 0(sp) - stl t1, 4(sp) - mov sp, a4 - -1: ldi v0, SYS_ify(osf_select) - callsys - - mov ra, a0 - bne a3, $cancel_error - - /* ... and bounce the remaining timeout back. */ - ldq a4, 48(sp) - beq a4, 2f - ldl t0, 0(sp) - ldl t1, 4(sp) - stq t0, 0(a4) - stq t1, 8(a4) - -2: stq v0, 8(sp) - CDISABLE - ldq v0, 8(sp) - ldq ra, 40(sp) - - addq sp, 64, sp - ret - - .align 3 -$cancel_error: - stq v0, 8(sp) - CDISABLE - ldq v0, 8(sp) - ldq ra, 40(sp) -#endif - - .align 3 -$error: - addq sp, 64, sp - SYSCALL_ERROR_HANDLER - -END(SELECT) -#endif /* __ASSUME_TIMEVAL64 */ - -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING -default_symbol_version (__select_tv64, __select, GLIBC_2.1) - -/* It seems to me to be a misfeature of the assembler that we can only - have one version-alias per symbol. So create an alias ourselves. - The 'p' is for 'public'. *Shrug* */ -strong_alias (__select_tv64, __select_tv64p) -default_symbol_version (__select_tv64p, select, GLIBC_2.1) -libc_hidden_ver (__select_tv64, __select) -strong_alias (__select_tv64, __libc_select) -#else -strong_alias (__select, __libc_select) -weak_alias (__select, select) -libc_hidden_def (__select) -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/semctl.c b/sysdeps/unix/sysv/linux/alpha/semctl.c deleted file mode 100644 index 9957f983bf..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/semctl.c +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright (C) 1995,1997,1998,2000,2003,2006 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <stdarg.h> -#include <sys/sem.h> -#include <ipc_priv.h> - -#include <sysdep.h> -#include <string.h> -#include <sys/syscall.h> - -#include <kernel-features.h> - -struct __old_semid_ds -{ - struct __old_ipc_perm sem_perm; /* operation permission struct */ - __time_t sem_otime; /* last semop() time */ - __time_t sem_ctime; /* last time changed by semctl() */ - struct sem *__sembase; /* ptr to first semaphore in array */ - struct sem_queue *__sem_pending; /* pending operations */ - struct sem_queue *__sem_pending_last; /* last pending operation */ - struct sem_undo *__undo; /* ondo requests on this array */ - unsigned short int sem_nsems; /* number of semaphores in set */ -}; - -/* Define a `union semun' suitable for Linux here. */ -union semun -{ - int val; /* value for SETVAL */ - struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */ - unsigned short int *array; /* array for GETALL & SETALL */ - struct seminfo *__buf; /* buffer for IPC_INFO */ -}; - -#include <bp-checks.h> -#include <bp-semctl.h> /* definition of CHECK_SEMCTL needs union semum */ - -/* Return identifier for array of NSEMS semaphores associated with - KEY. */ -int __new_semctl (int semid, int semnum, int cmd, ...); - -int -__new_semctl (int semid, int semnum, int cmd, ...) -{ - union semun arg; - va_list ap; - - va_start (ap, cmd); - - /* Get the argument. */ - arg = va_arg (ap, union semun); - - va_end (ap); - -#if __ASSUME_32BITUIDS > 0 - return INLINE_SYSCALL (semctl, 4, semid, semnum, cmd | __IPC_64, - CHECK_SEMCTL (&arg, semid, cmd | __IPC_64)->array); -#else - switch (cmd) { - case SEM_STAT: - case IPC_STAT: - case IPC_SET: - break; - default: - return INLINE_SYSCALL (semctl, 4, semid, semnum, cmd, - CHECK_SEMCTL (&arg, semid, cmd)->array); - } - - { - int save_errno = errno, result; - struct __old_semid_ds old; - struct semid_ds *buf; - - /* Unfortunately there is no way how to find out for sure whether - we should use old or new semctl. */ - result = INLINE_SYSCALL (semctl, 4, semid, semnum, cmd | __IPC_64, - CHECK_SEMCTL (&arg, semid, cmd | __IPC_64)->array); - if (result != -1 || errno != EINVAL) - return result; - - __set_errno(save_errno); - buf = arg.buf; - arg.buf = (void *)&old; - if (cmd == IPC_SET) - { - old.sem_perm.uid = buf->sem_perm.uid; - old.sem_perm.gid = buf->sem_perm.gid; - old.sem_perm.mode = buf->sem_perm.mode; - if (old.sem_perm.uid != buf->sem_perm.uid || - old.sem_perm.gid != buf->sem_perm.gid) - { - __set_errno (EINVAL); - return -1; - } - } - result = INLINE_SYSCALL (semctl, 4, semid, semnum, cmd, - CHECK_SEMCTL (&arg, semid, cmd)->array); - if (result != -1 && cmd != IPC_SET) - { - memset(buf, 0, sizeof(*buf)); - buf->sem_perm.__key = old.sem_perm.__key; - buf->sem_perm.uid = old.sem_perm.uid; - buf->sem_perm.gid = old.sem_perm.gid; - buf->sem_perm.cuid = old.sem_perm.cuid; - buf->sem_perm.cgid = old.sem_perm.cgid; - buf->sem_perm.mode = old.sem_perm.mode; - buf->sem_perm.__seq = old.sem_perm.__seq; - buf->sem_otime = old.sem_otime; - buf->sem_ctime = old.sem_ctime; - buf->sem_nsems = old.sem_nsems; - } - return result; - } -#endif -} - -#include <shlib-compat.h> -versioned_symbol (libc, __new_semctl, semctl, GLIBC_2_2); diff --git a/sysdeps/unix/sysv/linux/alpha/setcontext.S b/sysdeps/unix/sysv/linux/alpha/setcontext.S deleted file mode 100644 index 27abfd0c12..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/setcontext.S +++ /dev/null @@ -1,35 +0,0 @@ -/* Install given context. - Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#include <ucontext-offsets.h> - - -/* In case the user fiddled it, copy the "official" signal mask - from the ucontext_t into the sigcontext structure. */ -#undef PSEUDO_PREPARE_ARGS -#define PSEUDO_PREPARE_ARGS \ - ldq $0, UC_SIGMASK($16); \ - stq $0, UC_SIGCTX+SC_MASK($16); \ - lda $16, UC_SIGCTX($16); - -PSEUDO(__setcontext, sigreturn, 1) - ret -PSEUDO_END(__setcontext) -weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/alpha/setfpucw.c b/sysdeps/unix/sysv/linux/alpha/setfpucw.c deleted file mode 100644 index a7e3a55812..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/setfpucw.c +++ /dev/null @@ -1,80 +0,0 @@ -/* Set FP exception mask and rounding mode. - Copyright (C) 1996, 1997, 1998, 2003 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <fpu_control.h> -#include <asm/fpu.h> - -extern void __ieee_set_fp_control (unsigned long); -libc_hidden_proto(__ieee_set_fp_control) - -extern unsigned long __ieee_get_fp_control (void); -libc_hidden_proto(__ieee_get_fp_control) - -static inline unsigned long -rdfpcr (void) -{ - unsigned long fpcr; - asm ("excb; mf_fpcr %0" : "=f"(fpcr)); - return fpcr; -} - - -static inline void -wrfpcr (unsigned long fpcr) -{ - asm volatile ("mt_fpcr %0; excb" : : "f"(fpcr)); -} - - -void -__setfpucw (fpu_control_t fpu_control) -{ - unsigned long fpcr = 0, fpcw = 0; - - if (!fpu_control) - fpu_control = _FPU_DEFAULT; - - /* first, set dynamic rounding mode: */ - - fpcr = rdfpcr(); - fpcr &= ~FPCR_DYN_MASK; - switch (fpu_control & 0xc00) - { - case _FPU_RC_NEAREST: fpcr |= FPCR_DYN_NORMAL; break; - case _FPU_RC_DOWN: fpcr |= FPCR_DYN_MINUS; break; - case _FPU_RC_UP: fpcr |= FPCR_DYN_PLUS; break; - case _FPU_RC_ZERO: fpcr |= FPCR_DYN_CHOPPED; break; - } - wrfpcr(fpcr); - - /* now tell kernel about traps that we like to hear about: */ - - fpcw = __ieee_get_fp_control(); - fpcw &= ~IEEE_TRAP_ENABLE_MASK; - - if (!(fpu_control & _FPU_MASK_IM)) fpcw |= IEEE_TRAP_ENABLE_INV; - if (!(fpu_control & _FPU_MASK_DM)) fpcw |= IEEE_TRAP_ENABLE_UNF; - if (!(fpu_control & _FPU_MASK_ZM)) fpcw |= IEEE_TRAP_ENABLE_DZE; - if (!(fpu_control & _FPU_MASK_OM)) fpcw |= IEEE_TRAP_ENABLE_OVF; - if (!(fpu_control & _FPU_MASK_PM)) fpcw |= IEEE_TRAP_ENABLE_INE; - - __fpu_control = fpu_control; /* update global copy */ - - __ieee_set_fp_control(fpcw); -} diff --git a/sysdeps/unix/sysv/linux/alpha/setitimer.S b/sysdeps/unix/sysv/linux/alpha/setitimer.S deleted file mode 100644 index 59caeac680..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/setitimer.S +++ /dev/null @@ -1,137 +0,0 @@ -/* Copyright (C) 1998, 2003, 2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#define _ERRNO_H 1 -#include <bits/errno.h> -#include <kernel-features.h> - -.text - -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING -#define SETITIMER __setitimer_tv64 -#else -#define SETITIMER __setitimer -#endif - -#if defined __ASSUME_TIMEVAL64 -PSEUDO(SETITIMER, setitimer, 3) - ret -PSEUDO_END(SETITIMER) -#else -/* The problem here is that initially we made struct timeval compatible with - OSF/1, using int32. But we defined time_t with uint64, and later found - that POSIX requires tv_sec to be time_t. - - So now we have to do compatibility stuff. */ - -/* The variable is shared between all wrappers around signal handling - functions which have RT equivalents. */ -.comm __libc_missing_axp_tv64, 4 - -LEAF(SETITIMER, 48) - ldgp gp, 0(pv) - subq sp, 48, sp -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - ldl t0, __libc_missing_axp_tv64 - - /* Save arguments in case we do need to fall back. */ - stq a0, 0(sp) - stq a1, 8(sp) - stq a2, 16(sp) - - bne t0, $do32 - - ldi v0, SYS_ify(setitimer) - callsys - bne a3, $err64 - - /* Everything ok. */ - addq sp, 48, sp - ret - - /* If we didn't get ENOSYS, it is a real error. */ - .align 3 -$err64: cmpeq v0, ENOSYS, t0 - beq t0, $error - stl t0, __libc_missing_axp_tv64 - - /* Recover the saved arguments. */ - ldq a2, 16(sp) - ldq a1, 8(sp) - ldq a0, 0(sp) - - .align 3 -$do32: - /* Conditionally bounce new value down. */ - beq a1, 1f - ldq t0, 0(a1) - ldq t1, 8(a1) - ldq t2, 16(a1) - ldq t3, 24(a1) - stl t0, 32(sp) - stl t1, 36(sp) - stl t2, 40(sp) - stl t3, 44(sp) - addq sp, 32, a1 - -1: ldi v0, SYS_ify(osf_setitimer) - callsys - bne a3, $error - - /* Conditionaly bounce old value up. */ - ldq a2, 16(sp) - bne a2, 2f - ldl t0, 0(a2) - ldl t1, 4(a2) - ldl t2, 8(a2) - ldl t3, 12(a2) - stq t0, 0(a2) - stq t1, 8(a2) - stq t2, 48(a2) - stq t3, 24(a2) - -2: addq sp, 48, sp - ret - - .align 3 -$error: - addq sp, 48, sp - SYSCALL_ERROR_HANDLER - -END(SETITIMER) -#endif /* __ASSUME_TIMEVAL64 */ - -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING -default_symbol_version (__setitimer_tv64, __setitimer, GLIBC_2.1) - -/* It seems to me to be a misfeature of the assembler that we can only - have one version-alias per symbol. So create an alias ourselves. - The 'p' is for 'public'. *Shrug* */ -strong_alias (__setitimer_tv64, __setitimer_tv64p) -default_symbol_version (__setitimer_tv64p, setitimer, GLIBC_2.1) -#else -weak_alias (__setitimer, setitimer) -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/setregid.c b/sysdeps/unix/sysv/linux/alpha/setregid.c deleted file mode 100644 index 0973fe4ac1..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/setregid.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1998, 2000, 2003, 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <unistd.h> -#include <setxid.h> - - -int -__setregid (gid_t rgid, gid_t egid) -{ - return INLINE_SETXID_SYSCALL (setregid, 2, (int) rgid, (int) egid); -} -#ifndef __setregid -weak_alias (__setregid, setregid) -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/setresgid.c b/sysdeps/unix/sysv/linux/alpha/setresgid.c deleted file mode 100644 index 50e29e3c76..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/setresgid.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1998, 2000, 2003, 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <unistd.h> -#include <setxid.h> - - -int -__setresgid (gid_t rgid, gid_t egid, gid_t sgid) -{ - return INLINE_SETXID_SYSCALL (setresgid, 3, (int) rgid, - (int) egid, (int) sgid); -} -libc_hidden_def (__setresgid) -#ifndef __setresgid -weak_alias (__setresgid, setresgid) -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/setresuid.c b/sysdeps/unix/sysv/linux/alpha/setresuid.c deleted file mode 100644 index e76413bf6a..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/setresuid.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1998, 2000, 2003, 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <unistd.h> -#include <setxid.h> - - -int -__setresuid (uid_t ruid, uid_t euid, uid_t suid) -{ - return INLINE_SETXID_SYSCALL (setresuid, 3, (int) ruid, - (int) euid, (int) suid); -} -libc_hidden_def (__setresuid) -#ifndef __setresuid -weak_alias (__setresuid, setresuid) -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/setreuid.c b/sysdeps/unix/sysv/linux/alpha/setreuid.c deleted file mode 100644 index a23a34792e..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/setreuid.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1998, 2000, 2003, 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <unistd.h> -#include <setxid.h> - - -int -__setreuid (uid_t ruid, uid_t euid) -{ - return INLINE_SETXID_SYSCALL (setreuid, 2, (int) ruid, (int) euid); -} -#ifndef __setreuid -weak_alias (__setreuid, setreuid) -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/settimeofday.S b/sysdeps/unix/sysv/linux/alpha/settimeofday.S deleted file mode 100644 index e39eadc208..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/settimeofday.S +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright (C) 1998, 2003, 2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#define _ERRNO_H 1 -#include <bits/errno.h> -#include <kernel-features.h> - -.text - -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING -#define SETTIMEOFDAY __settimeofday_tv64 -#else -#define SETTIMEOFDAY __settimeofday -#endif - -#if defined __ASSUME_TIMEVAL64 -PSEUDO(SETTIMEOFDAY, settimeofday, 2) - ret -PSEUDO_END(SETTIMEOFDAY) -#else -/* The problem here is that initially we made struct timeval compatible with - OSF/1, using int32. But we defined time_t with uint64, and later found - that POSIX requires tv_sec to be time_t. - - So now we have to do compatibility stuff. */ - -/* The variable is shared between all wrappers around signal handling - functions which have RT equivalents. */ -.comm __libc_missing_axp_tv64, 4 - -LEAF(SETTIMEOFDAY, 16) - ldgp gp, 0(pv) - subq sp, 16, sp -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - ldl t0, __libc_missing_axp_tv64 - bne t0, $do32 - - /* Save arguments in case we do need to fall back. */ - stq a0, 0(sp) - stq a1, 8(sp) - - ldi v0, SYS_ify(settimeofday) - callsys - bne a3, $err64 - - /* Everything ok. */ - addq sp, 16, sp - ret - - /* If we didn't get ENOSYS, it is a real error. */ - .align 3 -$err64: cmpeq v0, ENOSYS, t0 - beq t0, $error - stl t0, __libc_missing_axp_tv64 - - /* Recover the saved arguments. */ - ldq a1, 8(sp) - ldq a0, 0(sp) - - .align 3 -$do32: - /* Conditionally bounce the timeval down. */ - beq a0, 1f - ldq t0, 0(a0) - ldq t1, 8(a0) - stl t0, 0(sp) - stl t1, 4(sp) - mov sp, a0 - -1: ldi v0, SYS_ify(osf_settimeofday) - callsys - bne a3, $error - - addq sp, 16, sp - ret - - .align 3 -$error: - addq sp, 16, sp - SYSCALL_ERROR_HANDLER - -END(SETTIMEOFDAY) -#endif /* __ASSUME_TIMEVAL64 */ - -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING -default_symbol_version (__settimeofday_tv64, __settimeofday, GLIBC_2.1) - -/* It seems to me to be a misfeature of the assembler that we can only - have one version-alias per symbol. So create an alias ourselves. - The 'p' is for 'public'. *Shrug* */ -strong_alias (__settimeofday_tv64, __settimeofday_tv64p) -default_symbol_version (__settimeofday_tv64p, settimeofday, GLIBC_2.1) -#else -weak_alias (__settimeofday, settimeofday) -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/shmctl.c b/sysdeps/unix/sysv/linux/alpha/shmctl.c deleted file mode 100644 index e63211fa00..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/shmctl.c +++ /dev/null @@ -1,135 +0,0 @@ -/* Copyright (C) 1995,1997,1998,2000,2003,2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <sys/shm.h> -#include <ipc_priv.h> - -#include <sysdep.h> -#include <string.h> -#include <sys/syscall.h> -#include <bits/wordsize.h> -#include <bp-checks.h> - -#include <kernel-features.h> - -struct __old_shmid_ds -{ - struct __old_ipc_perm shm_perm; /* operation permission struct */ - int shm_segsz; /* size of segment in bytes */ - __time_t shm_atime; /* time of last shmat() */ - __time_t shm_dtime; /* time of last shmdt() */ - __time_t shm_ctime; /* time of last change by shmctl() */ - __ipc_pid_t shm_cpid; /* pid of creator */ - __ipc_pid_t shm_lpid; /* pid of last shmop */ - unsigned short int shm_nattch; /* number of current attaches */ - unsigned short int __shm_npages; /* size of segment (pages) */ - unsigned long int *__unbounded __shm_pages; /* array of ptrs to frames -> SHMMAX */ - struct vm_area_struct *__unbounded __attaches; /* descriptors for attaches */ -}; - -struct __old_shminfo -{ - int shmmax; - int shmmin; - int shmmni; - int shmseg; - int shmall; -}; - -/* Provide operations to control over shared memory segments. */ -int __new_shmctl (int, int, struct shmid_ds *); - -int -__new_shmctl (int shmid, int cmd, struct shmid_ds *buf) -{ -#if __ASSUME_32BITUIDS > 0 - return INLINE_SYSCALL (shmctl, 3, shmid, cmd | __IPC_64, CHECK_1 (buf)); -#else - switch (cmd) { - case SHM_STAT: - case IPC_STAT: - case IPC_SET: - case IPC_INFO: - break; - default: - return INLINE_SYSCALL (shmctl, 3, shmid, cmd, CHECK_1 (buf)); - } - - { - int save_errno = errno, result; - struct __old_shmid_ds old; - - /* Unfortunately there is no way how to find out for sure whether - we should use old or new shmctl. */ - result = INLINE_SYSCALL (shmctl, 3, shmid, cmd | __IPC_64, CHECK_1 (buf)); - if (result != -1 || errno != EINVAL) - return result; - - __set_errno(save_errno); - if (cmd == IPC_SET) - { - old.shm_perm.uid = buf->shm_perm.uid; - old.shm_perm.gid = buf->shm_perm.gid; - old.shm_perm.mode = buf->shm_perm.mode; - if (old.shm_perm.uid != buf->shm_perm.uid || - old.shm_perm.gid != buf->shm_perm.gid) - { - __set_errno (EINVAL); - return -1; - } - } - result = INLINE_SYSCALL (shmctl, 3, shmid, cmd, __ptrvalue (&old)); - if (result != -1 && (cmd == SHM_STAT || cmd == IPC_STAT)) - { - memset(buf, 0, sizeof(*buf)); - buf->shm_perm.__key = old.shm_perm.__key; - buf->shm_perm.uid = old.shm_perm.uid; - buf->shm_perm.gid = old.shm_perm.gid; - buf->shm_perm.cuid = old.shm_perm.cuid; - buf->shm_perm.cgid = old.shm_perm.cgid; - buf->shm_perm.mode = old.shm_perm.mode; - buf->shm_perm.__seq = old.shm_perm.__seq; - buf->shm_atime = old.shm_atime; - buf->shm_dtime = old.shm_dtime; - buf->shm_ctime = old.shm_ctime; - buf->shm_segsz = old.shm_segsz; - buf->shm_nattch = old.shm_nattch; - buf->shm_cpid = old.shm_cpid; - buf->shm_lpid = old.shm_lpid; - } - else if (result != -1 && cmd == IPC_INFO) - { - struct __old_shminfo *oldi = (void *)&old; - struct shminfo *i = (struct shminfo *)buf; - - memset(i, 0, sizeof(*i)); - i->shmmax = oldi->shmmax; - i->shmmin = oldi->shmmin; - i->shmmni = oldi->shmmni; - i->shmseg = oldi->shmseg; - i->shmall = oldi->shmall; - } - return result; - } -#endif -} - -#include <shlib-compat.h> -versioned_symbol (libc, __new_shmctl, shmctl, GLIBC_2_2); diff --git a/sysdeps/unix/sysv/linux/alpha/sigaction.c b/sysdeps/unix/sysv/linux/alpha/sigaction.c deleted file mode 100644 index 26b081d9a3..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sigaction.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2003 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#include <sys/cdefs.h> -#include <stddef.h> - -/* - * In order to get the hidden arguments for rt_sigaction set up - * properly, we need to call the assembly version. Detect this in the - * INLINE_SYSCALL macro, and fail to expand inline in that case. - */ - -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - (__NR_##name == __NR_rt_sigaction \ - ? __syscall_rt_sigaction(args) \ - : INLINE_SYSCALL1(name, nr, args)) - -struct kernel_sigaction; -extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *__unbounded, - struct kernel_sigaction *__unbounded, size_t); - -#include <sysdeps/unix/sysv/linux/sigaction.c> diff --git a/sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h b/sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h deleted file mode 100644 index 16c5dcbc5b..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 1999, 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define SIGCONTEXT int _code, struct sigcontext * -#define SIGCONTEXT_EXTRA_ARGS _code, -#define GET_PC(ctx) ((void *) (ctx)->sc_pc) -#define GET_FRAME(ctx) ((void *) (ctx)->sc_regs[15]) -#define GET_STACK(ctx) ((void *) (ctx)->sc_regs[30]) -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff --git a/sysdeps/unix/sysv/linux/alpha/sigprocmask.c b/sysdeps/unix/sysv/linux/alpha/sigprocmask.c deleted file mode 100644 index 1916111a22..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sigprocmask.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 1993, 1995, 1997, 2003 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger (davidm@azstarnet.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <sysdep.h> -#include <signal.h> - -/* When there is kernel support for more than 64 signals, we'll have to - switch to a new system call convention here. */ - -int -__sigprocmask (int how, const sigset_t *set, sigset_t *oset) -{ - unsigned long int setval; - long result; - - if (set) - setval = set->__val[0]; - else - { - setval = 0; - how = SIG_BLOCK; /* ensure blocked mask doesn't get changed */ - } - - result = INLINE_SYSCALL (osf_sigprocmask, 2, how, setval); - if (result == -1) - /* If there are ever more than 63 signals, we need to recode this - in assembler since we wouldn't be able to distinguish a mask of - all 1s from -1, but for now, we're doing just fine... */ - return result; - - if (oset) - { - oset->__val[0] = result; - result = _SIGSET_NWORDS; - while (--result > 0) - oset->__val[result] = 0; - } - return 0; -} - -weak_alias (__sigprocmask, sigprocmask); diff --git a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S deleted file mode 100644 index 6863c07ec1..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 1993,1995,1996,1997,2002,2003 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger <davidm@cs.arizona.edu>, 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* sigsuspend is a special syscall since it needs to dereference the - sigset. This will have to change when we have more than 64 signals. */ - -#ifndef NO_CANCELLATION -#include <sysdep.h> - -#undef PSEUDO_PREPARE_ARGS -#define PSEUDO_PREPARE_ARGS ldq a0, 0(a0); - -PSEUDO(__sigsuspend_nocancel, sigsuspend, 1) - ret -/* Use END, not PSEUDO_END, so that we don't issue two $syscall_error - symbols; we'll jump into __sigsuspend for the error case. */ -END(__sigsuspend_nocancel) -#endif /* NO_CANCELLATION */ - -#include <sysdep-cancel.h> - -#undef PSEUDO_PREPARE_ARGS -#define PSEUDO_PREPARE_ARGS ldq a0, 0(a0); - -PSEUDO(__sigsuspend, sigsuspend, 1) - ret -PSEUDO_END(__sigsuspend) -libc_hidden_def (__sigsuspend) -weak_alias (__sigsuspend, sigsuspend) -strong_alias (__sigsuspend, __libc_sigsuspend) diff --git a/sysdeps/unix/sysv/linux/alpha/sizes.h b/sysdeps/unix/sysv/linux/alpha/sizes.h deleted file mode 100644 index 0c7f4d5d2a..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sizes.h +++ /dev/null @@ -1,24 +0,0 @@ -/* 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SIZES_H -#define _SIZES_H 1 - -#define PTR_SIZE_STR "8" - -#endif /* sizes.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/swapcontext.S b/sysdeps/unix/sysv/linux/alpha/swapcontext.S deleted file mode 100644 index 1221f67f78..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/swapcontext.S +++ /dev/null @@ -1,51 +0,0 @@ -/* Save current context and install the given one. - Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#include <ucontext-offsets.h> - -ENTRY(__swapcontext) - -#ifdef PROF - ldgp $29, 0($27) - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at - .prologue 1 -#elif defined PIC - .prologue 0 -#else - ldgp $29, 0($27) - .prologue 1 -#endif - -#ifdef PIC - unop - bsr $0, __getcontext_x !samegp - mov $17, $16 - br $31, __setcontext !samegp -#else - jsr $0, __getcontext_x - mov $17, $16 - jmp $31, __setcontext -#endif - -END(__swapcontext) -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/alpha/sys/acct.h b/sysdeps/unix/sysv/linux/alpha/sys/acct.h deleted file mode 100644 index 1e00006ef7..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sys/acct.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (C) 1996, 1997, 2000 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_ACCT_H - -#define _SYS_ACCT_H 1 -#include <features.h> - -#define __need_time_t -#include <time.h> - - -__BEGIN_DECLS - -#define ACCT_COMM 16 - -struct acct - { - char ac_comm[ACCT_COMM]; /* Accounting command name. */ - time_t ac_utime; /* Accounting user time. */ - time_t ac_stime; /* Accounting system time. */ - time_t ac_etime; /* Accounting elapsed time. */ - time_t ac_btime; /* Beginning time. */ - unsigned int ac_uid; /* Accounting user ID. */ - unsigned int ac_gid; /* Accounting group ID. */ - unsigned int ac_tty; /* Controlling tty. */ - /* Please note that the value of the `ac_tty' field, a device number, - is encoded differently in the kernel and for the libc dev_t type. */ - char ac_flag; /* Accounting flag. */ - long int ac_minflt; /* Accounting minor pagefaults. */ - long int ac_majflt; /* Accounting major pagefaults. */ - long int ac_exitcode; /* Accounting process exitcode. */ - }; - -enum - { - AFORK = 0001, /* Has executed fork, but no exec. */ - ASU = 0002, /* Used super-user privileges. */ - ACORE = 0004, /* Dumped core. */ - AXSIG = 0010 /* Killed by a signal. */ - }; - -#define AHZ 100 - - -/* Switch process accounting on and off. */ -extern int acct (__const char *__filename) __THROW; - -__END_DECLS - -#endif /* sys/acct.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/sys/epoll.h b/sysdeps/unix/sysv/linux/alpha/sys/epoll.h deleted file mode 100644 index 9f983a5156..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sys/epoll.h +++ /dev/null @@ -1,143 +0,0 @@ -/* Copyright (C) 2002-2006, 2007, 2008 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_EPOLL_H -#define _SYS_EPOLL_H 1 - -#include <stdint.h> -#include <sys/types.h> - -/* Get __sigset_t. */ -#include <bits/sigset.h> - -#ifndef __sigset_t_defined -# define __sigset_t_defined -typedef __sigset_t sigset_t; -#endif - - -/* Flags to be passed to epoll_create2. */ -enum - { - EPOLL_CLOEXEC = 010000000, -#define EPOLL_CLOEXEC EPOLL_CLOEXEC - EPOLL_NONBLOCK = 04 -#define EPOLL_NONBLOCK EPOLL_NONBLOCK - }; - - -enum EPOLL_EVENTS - { - EPOLLIN = 0x001, -#define EPOLLIN EPOLLIN - EPOLLPRI = 0x002, -#define EPOLLPRI EPOLLPRI - EPOLLOUT = 0x004, -#define EPOLLOUT EPOLLOUT - EPOLLRDNORM = 0x040, -#define EPOLLRDNORM EPOLLRDNORM - EPOLLRDBAND = 0x080, -#define EPOLLRDBAND EPOLLRDBAND - EPOLLWRNORM = 0x100, -#define EPOLLWRNORM EPOLLWRNORM - EPOLLWRBAND = 0x200, -#define EPOLLWRBAND EPOLLWRBAND - EPOLLMSG = 0x400, -#define EPOLLMSG EPOLLMSG - EPOLLERR = 0x008, -#define EPOLLERR EPOLLERR - EPOLLHUP = 0x010, -#define EPOLLHUP EPOLLHUP - EPOLLRDHUP = 0x2000, -#define EPOLLRDHUP EPOLLRDHUP - EPOLLONESHOT = (1 << 30), -#define EPOLLONESHOT EPOLLONESHOT - EPOLLET = (1 << 31) -#define EPOLLET EPOLLET - }; - - -/* Valid opcodes ( "op" parameter ) to issue to epoll_ctl(). */ -#define EPOLL_CTL_ADD 1 /* Add a file descriptor to the interface. */ -#define EPOLL_CTL_DEL 2 /* Remove a file descriptor from the interface. */ -#define EPOLL_CTL_MOD 3 /* Change file descriptor epoll_event structure. */ - - -typedef union epoll_data -{ - void *ptr; - int fd; - uint32_t u32; - uint64_t u64; -} epoll_data_t; - -struct epoll_event -{ - uint32_t events; /* Epoll events */ - epoll_data_t data; /* User data variable */ -}; - - -__BEGIN_DECLS - -/* Creates an epoll instance. Returns an fd for the new instance. - The "size" parameter is a hint specifying the number of file - descriptors to be associated with the new instance. The fd - returned by epoll_create() should be closed with close(). */ -extern int epoll_create (int __size) __THROW; - -/* Same as epoll_create but with an additional FLAGS parameter. */ -extern int epoll_create2 (int __size, int __flags) __THROW; - - -/* Manipulate an epoll instance "epfd". Returns 0 in case of success, - -1 in case of error ( the "errno" variable will contain the - specific error code ) The "op" parameter is one of the EPOLL_CTL_* - constants defined above. The "fd" parameter is the target of the - operation. The "event" parameter describes which events the caller - is interested in and any associated user data. */ -extern int epoll_ctl (int __epfd, int __op, int __fd, - struct epoll_event *__event) __THROW; - - -/* Wait for events on an epoll instance "epfd". Returns the number of - triggered events returned in "events" buffer. Or -1 in case of - error with the "errno" variable set to the specific error code. The - "events" parameter is a buffer that will contain triggered - events. The "maxevents" is the maximum number of events to be - returned ( usually size of "events" ). The "timeout" parameter - specifies the maximum wait time in milliseconds (-1 == infinite). - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int epoll_wait (int __epfd, struct epoll_event *__events, - int __maxevents, int __timeout); - - -/* Same as epoll_wait, but the thread's signal mask is temporarily - and atomically replaced with the one provided as parameter. - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int epoll_pwait (int __epfd, struct epoll_event *__events, - int __maxevents, int __timeout, - __const __sigset_t *__ss); - -__END_DECLS - -#endif /* sys/epoll.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/sys/eventfd.h b/sysdeps/unix/sysv/linux/alpha/sys/eventfd.h deleted file mode 100644 index c8ce554625..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sys/eventfd.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2007, 2008 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_EVENTFD_H -#define _SYS_EVENTFD_H 1 - -#include <stdint.h> - - -/* Type for event counter. */ -typedef uint64_t eventfd_t; - -/* Flags for signalfd. */ -enum - { - EFD_CLOEXEC = 010000000, -#define EFD_CLOEXEC EFD_CLOEXEC - EFD_NONBLOCK = 04 -#define EFD_NONBLOCK EFD_NONBLOCK - }; - - -__BEGIN_DECLS - -/* Return file descriptor for generic event channel. Set initial - value to COUNT. */ -extern int eventfd (int __count, int __flags) __THROW; - -/* Read event counter and possibly wait for events. */ -extern int eventfd_read (int __fd, eventfd_t *__value); - -/* Increment event counter. */ -extern int eventfd_write (int __fd, eventfd_t value); - -__END_DECLS - -#endif /* sys/eventfd.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/sys/inotify.h b/sysdeps/unix/sysv/linux/alpha/sys/inotify.h deleted file mode 100644 index d61c700d5d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sys/inotify.h +++ /dev/null @@ -1,105 +0,0 @@ -/* Copyright (C) 2005, 2006, 2008 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_INOTIFY_H -#define _SYS_INOTIFY_H 1 - -#include <stdint.h> - - -/* Flags for the parameter of inotify_init1. */ -enum - { - IN_CLOEXEC = 010000000, -#define IN_CLOEXEC IN_CLOEXEC - IN_NONBLOCK = 04 -#define IN_NONBLOCK IN_NONBLOCK - }; - - -/* Structure describing an inotify event. */ -struct inotify_event -{ - int wd; /* Watch descriptor. */ - uint32_t mask; /* Watch mask. */ - uint32_t cookie; /* Cookie to synchronize two events. */ - uint32_t len; /* Length (including NULs) of name. */ - char name __flexarr; /* Name. */ -}; - - -/* Supported events suitable for MASK parameter of INOTIFY_ADD_WATCH. */ -#define IN_ACCESS 0x00000001 /* File was accessed. */ -#define IN_MODIFY 0x00000002 /* File was modified. */ -#define IN_ATTRIB 0x00000004 /* Metadata changed. */ -#define IN_CLOSE_WRITE 0x00000008 /* Writtable file was closed. */ -#define IN_CLOSE_NOWRITE 0x00000010 /* Unwrittable file closed. */ -#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close. */ -#define IN_OPEN 0x00000020 /* File was opened. */ -#define IN_MOVED_FROM 0x00000040 /* File was moved from X. */ -#define IN_MOVED_TO 0x00000080 /* File was moved to Y. */ -#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* Moves. */ -#define IN_CREATE 0x00000100 /* Subfile was created. */ -#define IN_DELETE 0x00000200 /* Subfile was deleted. */ -#define IN_DELETE_SELF 0x00000400 /* Self was deleted. */ -#define IN_MOVE_SELF 0x00000800 /* Self was moved. */ - -/* Events sent by the kernel. */ -#define IN_UNMOUNT 0x00002000 /* Backing fs was unmounted. */ -#define IN_Q_OVERFLOW 0x00004000 /* Event queued overflowed. */ -#define IN_IGNORED 0x00008000 /* File was ignored. */ - -/* Helper events. */ -#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close. */ -#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* Moves. */ - -/* Special flags. */ -#define IN_ONLYDIR 0x01000000 /* Only watch the path if it is a - directory. */ -#define IN_DONT_FOLLOW 0x02000000 /* Do not follow a sym link. */ -#define IN_MASK_ADD 0x20000000 /* Add to the mask of an already - existing watch. */ -#define IN_ISDIR 0x40000000 /* Event occurred against dir. */ -#define IN_ONESHOT 0x80000000 /* Only send event once. */ - -/* All events which a program can wait on. */ -#define IN_ALL_EVENTS (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE \ - | IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM \ - | IN_MOVED_TO | IN_CREATE | IN_DELETE \ - | IN_DELETE_SELF | IN_MOVE_SELF) - - -__BEGIN_DECLS - -/* Create and initialize inotify instance. */ -extern int inotify_init (void) __THROW; - -/* Create and initialize inotify instance. */ -extern int inotify_init1 (int __flags) __THROW; - -/* Add watch of object NAME to inotify instance FD. Notify about - events specified by MASK. */ -extern int inotify_add_watch (int __fd, const char *__name, uint32_t __mask) - __THROW; - -/* Remove the watch specified by WD from the inotify instance FD. */ -extern int inotify_rm_watch (int __fd, uint32_t __wd) __THROW; - -__END_DECLS - -#endif /* sys/inotify.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/sys/io.h b/sysdeps/unix/sysv/linux/alpha/sys/io.h deleted file mode 100644 index 4334c63925..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sys/io.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (C) 1996, 1999 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_IO_H - -#define _SYS_IO_H 1 -#include <features.h> - -__BEGIN_DECLS - -/* If TURN_ON is TRUE, request for permission to do direct i/o on the - port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O - permission off for that range. This call requires root privileges. - - Portability note: not all Linux platforms support this call. Most - platforms based on the PC I/O architecture probably will, however. - E.g., Linux/Alpha for Alpha PCs supports this. */ -extern int ioperm (unsigned long int __from, unsigned long int __num, - int __turn_on) __THROW; - -/* Set the I/O privilege level to LEVEL. If LEVEL>3, permission to - access any I/O port is granted. This call requires root - privileges. */ -extern int iopl (int __level) __THROW; - -/* Return the physical address of the DENSE I/O memory or NULL if none - is available (e.g. on a jensen). */ -extern unsigned long int _bus_base (void) __THROW __attribute__ ((const)); -extern unsigned long int bus_base (void) __THROW __attribute__ ((const)); - -/* Return the physical address of the SPARSE I/O memory. */ -extern unsigned long _bus_base_sparse (void) __THROW __attribute__ ((const)); -extern unsigned long bus_base_sparse (void) __THROW __attribute__ ((const)); - -/* Return the HAE shift used by the SPARSE I/O memory. */ -extern int _hae_shift (void) __THROW __attribute__ ((const)); -extern int hae_shift (void) __THROW __attribute__ ((const)); - -/* Previous three are deprecated in favour of the following, which - knows about multiple PCI "hoses". Provide the PCI bus and dfn - numbers just as to pciconfig_read/write. */ - -enum __pciconfig_iobase_which -{ - IOBASE_HOSE = 0, /* Return hose index. */ - IOBASE_SPARSE_MEM = 1, /* Return physical memory addresses. */ - IOBASE_DENSE_MEM = 2, - IOBASE_SPARSE_IO = 3, - IOBASE_DENSE_IO = 4 -}; - -extern long pciconfig_iobase(enum __pciconfig_iobase_which __which, - unsigned long int __bus, - unsigned long int __dfn) - __THROW __attribute__ ((const)); - -/* Access PCI space protected from machine checks. */ -extern int pciconfig_read (unsigned long int __bus, - unsigned long int __dfn, - unsigned long int __off, - unsigned long int __len, - unsigned char *__buf) __THROW; - -extern int pciconfig_write (unsigned long int __bus, - unsigned long int __dfn, - unsigned long int __off, - unsigned long int __len, - unsigned char *__buf) __THROW; - -/* Userspace declarations. */ -extern unsigned int inb (unsigned long __port) __THROW; -extern unsigned int inw (unsigned long __port) __THROW; -extern unsigned int inl (unsigned long __port) __THROW; -extern void outb (unsigned char __b, unsigned long __port) __THROW; -extern void outw (unsigned short __w, unsigned long __port) __THROW; -extern void outl (unsigned int __l, unsigned long __port) __THROW; - -__END_DECLS - -#endif /* _SYS_IO_H */ diff --git a/sysdeps/unix/sysv/linux/alpha/sys/procfs.h b/sysdeps/unix/sysv/linux/alpha/sys/procfs.h deleted file mode 100644 index bee51f94e2..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sys/procfs.h +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright (C) 1996, 1997, 1999 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somehow modelled after the file of the same name on SysVr4 - systems. It provides a definition of the core file format for ELF - used on Linux. */ - -#include <features.h> -#include <signal.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/ucontext.h> -#include <sys/user.h> -#include <asm/elf.h> - -__BEGIN_DECLS - -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - gdb doesn't really use excluded. Fields present but not used are - marked with "XXX". */ -struct elf_prstatus - { -#if 0 - long int pr_flags; /* XXX Process flags. */ - short int pr_why; /* XXX Reason for process halt. */ - short int pr_what; /* XXX More detailed reason. */ -#endif - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ -#if 0 - struct sigaltstack pr_altstack; /* Alternate stack info. */ - struct sigaction pr_action; /* Signal action for current sig. */ -#endif - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ -#if 0 - long int pr_instr; /* Current instruction. */ -#endif - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ - unsigned int pr_uid; - unsigned int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef gregset_t prgregset_t; -typedef fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore habe only ine PID type. */ -typedef __pid_t lwpid_t; - - -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/sys/signalfd.h b/sysdeps/unix/sysv/linux/alpha/sys/signalfd.h deleted file mode 100644 index 4cbe977768..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sys/signalfd.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (C) 2007, 2008 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_SIGNALFD_H -#define _SYS_SIGNALFD_H 1 - -#define __need_sigset_t -#include <signal.h> -#include <stdint.h> - - -struct signalfd_siginfo -{ - uint32_t ssi_signo; - int32_t ssi_errno; - int32_t ssi_code; - uint32_t ssi_pid; - uint32_t ssi_uid; - int32_t ssi_fd; - uint32_t ssi_tid; - uint32_t ssi_band; - uint32_t ssi_overrun; - uint32_t ssi_trapno; - int32_t ssi_status; - int32_t ssi_int; - uint64_t ssi_ptr; - uint64_t ssi_utime; - uint64_t ssi_stime; - uint64_t ssi_addr; - uint8_t __pad[48]; -}; - -/* Flags for signalfd. */ -enum - { - SFD_CLOEXEC = 010000000, -#define SFD_CLOEXEC SFD_CLOEXEC - SFD_NONBLOCK = 04 -#define SFD_NONBLOCK SFD_NONBLOCK - }; - -__BEGIN_DECLS - -/* Request notification for delivery of signals in MASK to be - performed using descriptor FD.*/ -extern int signalfd (int __fd, const sigset_t *__mask, int __flags) - __THROW __nonnull ((2)); - -__END_DECLS - -#endif /* sys/signalfd.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/sys/timerfd.h b/sysdeps/unix/sysv/linux/alpha/sys/timerfd.h deleted file mode 100644 index 09d6ccf6cc..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sys/timerfd.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2008 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_TIMERFD_H -#define _SYS_TIMERFD_H 1 - -#include <time.h> - - -/* Bits to be set in the FLAGS parameter of `timerfd_create'. */ -enum - { - TFD_CLOEXEC = 010000000, -#define TFD_CLOEXEC TFD_CLOEXEC - TFD_NONBLOCK = 04 -#define TFD_NONBLOCK TFD_NONBLOCK - }; - - -/* Bits to be set in the FLAGS parameter of `timerfd_settime'. */ -enum - { - TFD_TIMER_ABSTIME = 1 << 0 -#define TFD_TIMER_ABSTIME TFD_TIMER_ABSTIME - }; - - -__BEGIN_DECLS - -/* Return file descriptor for new interval timer source. */ -extern int timerfd_create (clockid_t __clock_id, int __flags) __THROW; - -/* Set next expiration time of interval timer source UFD to UTMR. If - FLAGS has the TFD_TIMER_ABSTIME flag set the timeout value is - absolute. Optionally return the old expiration time in OTMR. */ -extern int timerfd_settime (int __ufd, int __flags, - __const struct itimerspec *__utmr, - struct itimerspec *__otmr) __THROW; - -/* Return the next expiration time of UFD. */ -extern int timerfd_gettime (int __ufd, struct itimerspec *__otmr) __THROW; - -__END_DECLS - -#endif /* sys/timerfd.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h b/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h deleted file mode 100644 index 438293c62b..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 1998, 1999 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include <features.h> -#include <signal.h> - -#include <bits/sigcontext.h> - - -/* Type for general register. */ -typedef long int greg_t; - -/* Number of general registers. */ -#define NGREG 33 - -/* Container for all general registers. */ -typedef greg_t gregset_t[NGREG]; - -/* Type for floating-point register. */ -typedef long int fpreg_t; - -/* Number of general registers. */ -#define NFPREG 32 - -/* Container for all general registers. */ -typedef fpreg_t fpregset_t[NFPREG]; - - -/* A machine context is exactly a sigcontext. */ -typedef struct sigcontext mcontext_t; - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long int uc_flags; - struct ucontext *uc_link; - unsigned long __uc_osf_sigmask; - stack_t uc_stack; - mcontext_t uc_mcontext; - __sigset_t uc_sigmask; - } ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/sys/user.h b/sysdeps/unix/sysv/linux/alpha/sys/user.h deleted file mode 100644 index 4cd29d2ff8..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sys/user.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 1999 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SYS_USER_H -#define _SYS_USER_H 1 - -/* The whole purpose of this file is for gdb/strace and gdb/strace - only. Don't read too much into it. Don't use it for anything other - than gdb/strace unless you know what you are doing. */ - -#include <asm/page.h> -#include <asm/reg.h> - -struct user -{ - unsigned long int regs[EF_SIZE / 8 + 32]; /* integer and fp regs */ - size_t u_tsize; /* text size (pages) */ - size_t u_dsize; /* data size (pages) */ - size_t u_ssize; /* stack size (pages) */ - unsigned long int start_code; /* text starting address */ - unsigned long int start_data; /* data starting address */ - unsigned long int start_stack; /* stack starting address */ - long int signal; /* signal causing core dump */ - struct regs *u_ar0; /* help gdb find registers */ - unsigned long int magic; /* identifies a core file */ - char u_comm[32]; /* user command name */ -}; - -#define NBPG PAGE_SIZE -#define UPAGES 1 -#define HOST_TEXT_START_ADDR (u.start_code) -#define HOST_DATA_START_ADDR (u.start_data) -#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) - -#endif /* sys/user.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/syscall.S b/sysdeps/unix/sysv/linux/alpha/syscall.S deleted file mode 100644 index 0c4081363a..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/syscall.S +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger <davidm@azstarnet.com>, 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> - -/* - * This is for COMPATIBILITY with Linux/x86 only. Linux/Alpha system - * calls return an error indication in a3. This allows arbitrary 64bit - * values to be returned in v0 (because negative values are not - * mistaken as error numbers). However, C allows only one value to - * be returned, so the interface below folds the error indication passed in - * a3 back into v0: it sets v0 to -errno if an error occurs. Thus, - * no negative 64bit numbers can be returned. To avoid this problem, - * use assembly stubs wherever possible/convenient. - * - * Usage: - * - * long syscall(syscall_number, arg1, arg2, arg3, arg4, arg5) - * - * syscall_number = the index of the system call we're invoking - * arg1-arg5 = up to 5 integer arguments to the system call - * - * We need to do some arg shifting: the kernel expects the - * syscall number in v0 and the first five args in a0-a4. - * - */ - - -LEAF(__syscall, 0) -#ifdef PROF - ldgp gp, 0(pv) - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at - .prologue 1 -#else - .prologue 0 -#endif - - mov a0, v0 /* Syscall number -> v0 */ - mov a1, a0 /* arg1-arg5 -> a0-a4 */ - mov a2, a1 - mov a3, a2 - mov a4, a3 - mov a5, a4 - - call_pal PAL_callsys /* Invoke system call */ - bne a3, $error - ret - -$error: -#ifndef PROF - br gp, 2f -2: ldgp gp, 0(gp) -#endif - SYSCALL_ERROR_HANDLER - -END(__syscall) - -weak_alias (__syscall, syscall) diff --git a/sysdeps/unix/sysv/linux/alpha/syscalls.list b/sysdeps/unix/sysv/linux/alpha/syscalls.list deleted file mode 100644 index de2c3ceac0..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/syscalls.list +++ /dev/null @@ -1,55 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -oldmsgctl EXTRA msgctl i:iip __old_msgctl msgctl@GLIBC_2.0 -msgget - msgget i:ii __msgget msgget -msgrcv - msgrcv Ci:ibnii __msgrcv msgrcv -msgsnd - msgsnd Ci:ibni __msgsnd msgsnd -shmat - osf_shmat i:ipi __shmat shmat -oldshmctl EXTRA shmctl i:iip __old_shmctl shmctl@GLIBC_2.0 -shmdt - shmdt i:s __shmdt shmdt -shmget - shmget i:iii __shmget shmget -semop - semop i:ipi __semop semop -semtimedop - semtimedop i:ipip semtimedop -semget - semget i:iii __semget semget -oldsemctl EXTRA semctl i:iiii __old_semctl semctl@GLIBC_2.0 - -sigstack - sigstack 2 sigstack -vfork - vfork 0 __vfork vfork - -getpriority - getpriority i:ii __getpriority getpriority - -# proper socket implementations: -accept - accept Ci:iBN __libc_accept __accept accept -bind - bind i:ipi __bind bind -connect - connect Ci:ipi __libc_connect __connect_internal __connect connect -getpeername - getpeername i:ipp __getpeername getpeername -getsockname - getsockname i:ipp __getsockname getsockname -getsockopt - getsockopt i:iiiBN __getsockopt getsockopt -listen - listen i:ii __listen listen -recv - recv Ci:ibni __libc_recv __recv recv -recvfrom - recvfrom Ci:ibniBN __libc_recvfrom __recvfrom recvfrom -recvmsg - recvmsg Ci:ipi __libc_recvmsg __recvmsg recvmsg -send - send Ci:ibni __libc_send __send send -sendmsg - sendmsg Ci:ipi __libc_sendmsg __sendmsg sendmsg -sendto - sendto Ci:ibnibn __libc_sendto __sendto sendto -setsockopt - setsockopt i:iiibn __setsockopt setsockopt -shutdown - shutdown i:ii __shutdown shutdown -socket - socket i:iii __socket socket -socketpair - socketpair i:iiif __socketpair socketpair - -ptrace - ptrace 4 __ptrace ptrace - -# access pci space protected from machine checks: -pciconfig_read EXTRA pciconfig_read 5 pciconfig_read -pciconfig_write EXTRA pciconfig_write 5 pciconfig_write -pciconfig_iobase EXTRA pciconfig_iobase 3 __pciconfig_iobase pciconfig_iobase - -# support old timeval32 entry points -osf_select - osf_select C:5 __select_tv32 __select@GLIBC_2.0 select@GLIBC_2.0 -osf_gettimeofday - osf_gettimeofday 2 __gettimeofday_tv32 __gettimeofday@GLIBC_2.0 gettimeofday@GLIBC_2.0 -osf_settimeofday - osf_settimeofday 2 __settimeofday_tv32 settimeofday@GLIBC_2.0 -osf_getitimer - osf_getitimer 2 __getitimer_tv32 getitimer@GLIBC_2.0 -osf_setitimer - osf_setitimer 3 __setitimer_tv32 setitimer@GLIBC_2.0 -osf_utimes - osf_utimes 2 __utimes_tv32 utimes@GLIBC_2.0 -osf_getrusage - osf_getrusage 2 __getrusage_tv32 getrusage@GLIBC_2.0 -osf_wait4 - osf_wait4 2 __wait4_tv32 wait4@GLIBC_2.0 diff --git a/sysdeps/unix/sysv/linux/alpha/sysconf.c b/sysdeps/unix/sysv/linux/alpha/sysconf.c deleted file mode 100644 index 3e5b4ee85f..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sysconf.c +++ /dev/null @@ -1,152 +0,0 @@ -/* Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <assert.h> -#include <stdbool.h> -#include <stdlib.h> -#include <unistd.h> - - -static long int linux_sysconf (int name); - -#define CSHAPE(totalsize, linesize, assoc) \ - ((totalsize & ~0xff) | (linesize << 4) | assoc) - -extern long __libc_alpha_cache_shape[4]; - -static inline unsigned long -implver (void) -{ - unsigned long i; -#if __GNUC_PREREQ(3,3) - i = __builtin_alpha_implver (); -#else - asm ("implver %0" : "=r" (i)); -#endif - return i; -} - -static inline unsigned long -amask (unsigned long x) -{ - unsigned long r; -#if __GNUC_PREREQ(3,3) - r = __builtin_alpha_amask (x); -#else - asm ("amask %1,%0" : "=r"(r) : "Ir"(x)); -#endif - return r; -} - -/* Get the value of the system variable NAME. */ -long int -__sysconf (int name) -{ - long shape, index; - - /* We only handle the cache information here (for now). */ - if (name < _SC_LEVEL1_ICACHE_SIZE || name > _SC_LEVEL4_CACHE_LINESIZE) - return linux_sysconf (name); - - /* No Alpha has L4 caches. */ - if (name >= _SC_LEVEL4_CACHE_SIZE) - return -1; - - index = (name - _SC_LEVEL1_ICACHE_SIZE) / 3; - shape = __libc_alpha_cache_shape[index]; - if (shape == -2) - { - long shape_l1i, shape_l1d, shape_l2, shape_l3 = -1; - - /* ??? In the cases below for which we do not know L1 cache sizes, - we could do timings to measure sizes. But for the Bcache, it's - generally big enough that (without additional help) TLB effects - get in the way. We'd either need to be able to allocate large - pages or have the kernel do the timings from KSEG. Fortunately, - kernels beginning with 2.6.5 will pass us this info in auxvec. */ - - switch (implver()) - { - case 0: /* EV4 */ - /* EV4/LCA45 had 8k L1 caches; EV45 had 16k L1 caches. */ - /* EV4/EV45 had 128k to 16M 32-byte direct Bcache. LCA45 - had 64k to 8M 8-byte direct Bcache. Can't tell. */ - shape_l1i = shape_l1d = shape_l2 = CSHAPE (0, 5, 1); - break; - - case 1: /* EV5 */ - if (amask (1 << 8)) - { - /* MAX insns not present; either EV5 or EV56. */ - shape_l1i = shape_l1d = CSHAPE(8*1024, 5, 1); - /* ??? L2 and L3 *can* be configured as 32-byte line. */ - shape_l2 = CSHAPE (96*1024, 6, 3); - /* EV5/EV56 has 1M to 16M Bcache. */ - shape_l3 = CSHAPE (0, 6, 1); - } - else - { - /* MAX insns present; either PCA56 or PCA57. */ - /* PCA56 had 16k 64-byte cache; PCA57 had 32k Icache. */ - /* PCA56 had 8k 64-byte cache; PCA57 had 16k Dcache. */ - /* PCA5[67] had 512k to 4M Bcache. */ - shape_l1i = shape_l1d = shape_l2 = CSHAPE (0, 6, 1); - } - break; - - case 2: /* EV6 */ - shape_l1i = shape_l1d = CSHAPE(64*1024, 6, 2); - /* EV6/EV67/EV68* had 1M to 16M Bcache. */ - shape_l2 = CSHAPE (0, 6, 1); - break; - - case 3: /* EV7 */ - shape_l1i = shape_l1d = CSHAPE(64*1024, 6, 2); - shape_l2 = CSHAPE(7*1024*1024/4, 6, 7); - break; - - default: - shape_l1i = shape_l1d = shape_l2 = 0; - break; - } - - __libc_alpha_cache_shape[0] = shape_l1i; - __libc_alpha_cache_shape[1] = shape_l1d; - __libc_alpha_cache_shape[2] = shape_l2; - __libc_alpha_cache_shape[3] = shape_l3; - shape = __libc_alpha_cache_shape[index]; - } - - if (shape <= 0) - return shape; - - switch (name % 3) - { - case 0: /* total size */ - return shape & -0x100; - case 1: /* associativity */ - return shape & 0xf; - default: /* line size */ - return 1L << ((shape >> 4) & 0xf); - } -} - -/* Now the generic Linux version. */ -#undef __sysconf -#define __sysconf static linux_sysconf -#include "../sysconf.c" diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep.h b/sysdeps/unix/sysv/linux/alpha/sysdep.h deleted file mode 100644 index f0661d1622..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sysdep.h +++ /dev/null @@ -1,101 +0,0 @@ -/* Copyright (C) 1992, 1993, 1995, 1996, 1997, 2002, 2003, 2004, 2007 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _LINUX_ALPHA_SYSDEP_H -#define _LINUX_ALPHA_SYSDEP_H 1 - -#ifdef __ASSEMBLER__ -#include <asm/pal.h> -#include <alpha/regdef.h> -#endif - -/* There is some commonality. */ -#include <sysdeps/unix/alpha/sysdep.h> - -#include <tls.h> - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#ifdef __STDC__ -# define SYS_ify(syscall_name) __NR_##syscall_name -#else -# define SYS_ify(syscall_name) __NR_/**/syscall_name -#endif - -/* Define some aliases to make automatic syscall generation work - properly. The SYS_* variants are for the benefit of the files in - sysdeps/unix. */ -#define __NR_getpid __NR_getxpid -#define __NR_getuid __NR_getxuid -#define __NR_getgid __NR_getxgid -#define SYS_getpid __NR_getxpid -#define SYS_getuid __NR_getxuid -#define SYS_getgid __NR_getxgid - -/* - * Some syscalls no Linux program should know about: - */ -#define __NR_osf_sigprocmask 48 -#define __NR_osf_shmat 209 -#define __NR_osf_getsysinfo 256 -#define __NR_osf_setsysinfo 257 - -/* Help old kernel headers where particular syscalls are not available. */ -#ifndef __NR_semtimedop -# define __NR_semtimedop 423 -#endif - -/* This is a kludge to make syscalls.list find these under the names - pread and pwrite, since some kernel headers define those names - and some define the *64 names for the same system calls. */ -#if !defined __NR_pread && defined __NR_pread64 -# define __NR_pread __NR_pread64 -#endif -#if !defined __NR_pwrite && defined __NR_pwrite64 -# define __NR_pwrite __NR_pwrite64 -#endif - -/* - * In order to get the hidden arguments for rt_sigaction set up - * properly, we need to call the assembly version. This shouldn't - * happen except for inside sigaction.c, where we handle this - * specially. Catch other uses and error. - */ - -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ -({ \ - extern char ChEcK[__NR_##name == __NR_rt_sigaction ? -1 : 1] \ - __attribute__((unused)); \ - INLINE_SYSCALL1(name, nr, args); \ -}) - -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, err_out, nr, args...) \ -({ \ - extern char ChEcK[__NR_##name == __NR_rt_sigaction ? -1 : 1] \ - __attribute__((unused)); \ - INTERNAL_SYSCALL1(name, err_out, nr, args); \ -}) - -#endif /* _LINUX_ALPHA_SYSDEP_H */ diff --git a/sysdeps/unix/sysv/linux/alpha/ucontext-offsets.sym b/sysdeps/unix/sysv/linux/alpha/ucontext-offsets.sym deleted file mode 100644 index f95ff75636..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/ucontext-offsets.sym +++ /dev/null @@ -1,18 +0,0 @@ -#include <stddef.h> -#include <sys/ucontext.h> - --- -UC_LINK offsetof (ucontext_t, uc_link) -UC_OSF_SIGMASK offsetof (ucontext_t, __uc_osf_sigmask) -UC_STACK offsetof (ucontext_t, uc_stack) -UC_SIGCTX offsetof (ucontext_t, uc_mcontext) -UC_SIGMASK offsetof (ucontext_t, uc_sigmask) -SC_REGS offsetof (struct sigcontext, sc_regs) -SC_FPREGS offsetof (struct sigcontext, sc_fpregs) -SC_PC offsetof (struct sigcontext, sc_pc) -SC_PS offsetof (struct sigcontext, sc_ps) -SC_FPCRS offsetof (struct sigcontext, sc_fpcr) -SC_MASK offsetof (struct sigcontext, sc_mask) -SC_FPCR offsetof (struct sigcontext, sc_fpcr) -SS_SP offsetof (stack_t, ss_sp) -SS_SIZE offsetof (stack_t, ss_size) diff --git a/sysdeps/unix/sysv/linux/alpha/utimes.S b/sysdeps/unix/sysv/linux/alpha/utimes.S deleted file mode 100644 index 0dd0a9372b..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/utimes.S +++ /dev/null @@ -1,123 +0,0 @@ -/* Copyright (C) 1998, 2003, 2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#define _ERRNO_H 1 -#include <bits/errno.h> -#include <kernel-features.h> - -.text - -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING -#define UTIMES __utimes_tv64 -#else -#define UTIMES __utimes -#endif - -#if defined __ASSUME_TIMEVAL64 -PSEUDO(UTIMES, utimes, 2) - ret -PSEUDO_END(UTIMES) -#else -/* The problem here is that initially we made struct timeval compatible with - OSF/1, using int32. But we defined time_t with uint64, and later found - that POSIX requires tv_sec to be time_t. - - So now we have to do compatibility stuff. */ - -/* The variable is shared between all wrappers around signal handling - functions which have RT equivalents. */ -.comm __libc_missing_axp_tv64, 4 - -LEAF(UTIMES, 16) - ldgp gp, 0(pv) - subq sp, 16, sp -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - ldl t0, __libc_missing_axp_tv64 - - /* Save arguments in case we do need to fall back. */ - stq a0, 0(sp) - stq a1, 8(sp) - - bne t0, $do32 - - ldi v0, SYS_ify(utimes) - callsys - bne a3, $err64 - - /* Everything ok. */ - addq sp, 16, sp - ret - - /* If we didn't get ENOSYS, it is a real error. */ - .align 3 -$err64: cmpeq v0, ENOSYS, t0 - beq t0, $error - stl t0, __libc_missing_axp_tv64 - - /* Recover the saved arguments. */ - ldq a1, 8(sp) - ldq a0, 0(sp) - - .align 3 -$do32: - /* Conditionally bounce values down. */ - beq a1, 1f - ldq t0, 0(a1) - ldq t1, 8(a1) - ldq t2, 16(a1) - ldq t3, 24(a1) - stl t0, 0(sp) - stl t1, 4(sp) - stl t2, 8(sp) - stl t3, 12(sp) - mov sp, a1 - -1: ldi v0, SYS_ify(osf_utimes) - callsys - bne a3, $error - - addq sp, 16, sp - ret - - .align 3 -$error: - addq sp, 16, sp - SYSCALL_ERROR_HANDLER - -END(UTIMES) -#endif /* __ASSUME_TIMEVAL64 */ - -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING -default_symbol_version (__utimes_tv64, __utimes, GLIBC_2.1) - -/* It seems to me to be a misfeature of the assembler that we can only - have one version-alias per symbol. So create an alias ourselves. - The 'p' is for 'public'. *Shrug* */ -strong_alias (__utimes_tv64, __utimes_tv64p) -default_symbol_version (__utimes_tv64p, utimes, GLIBC_2.1) -#else -weak_alias (__utimes, utimes) -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/wait4.S b/sysdeps/unix/sysv/linux/alpha/wait4.S deleted file mode 100644 index 634993deb8..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/wait4.S +++ /dev/null @@ -1,156 +0,0 @@ -/* Copyright (C) 1998, 2003, 2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#define _ERRNO_H 1 -#include <bits/errno.h> -#include <kernel-features.h> - -.text - -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING -#define WAIT4 __wait4_tv64 -#else -#define WAIT4 __wait4 -#endif - -#if defined __ASSUME_TIMEVAL64 -PSEUDO(WAIT4, wait4, 4) - ret -PSEUDO_END(WAIT4) -#else -/* The problem here is that initially we made struct timeval compatible with - OSF/1, using int32. But we defined time_t with uint64, and later found - that POSIX requires tv_sec to be time_t. - - So now we have to do compatibility stuff. */ - -/* The variable is shared between all wrappers around signal handling - functions which have RT equivalents. */ -.comm __libc_missing_axp_tv64, 4 - -LEAF(WAIT4, 32) - ldgp gp, 0(pv) - subq sp, 32, sp -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - ldl t0, __libc_missing_axp_tv64 - - /* Save arguments in case we do need to fall back. */ - stq a0, 0(sp) - stq a1, 8(sp) - stq a2, 16(sp) - stq a3, 24(sp) - - bne t0, $do32 - - ldi v0, SYS_ify(wait4) - callsys - bne a3, $err64 - - /* Everything ok. */ - addq sp, 32, sp - ret - - /* If we didn't get ENOSYS, it is a real error. */ - .align 3 -$err64: cmpeq v0, ENOSYS, t0 - beq t0, $error - stl t0, __libc_missing_axp_tv64 - - /* Recover the saved arguments. */ - ldq a3, 24(sp) - ldq a2, 16(sp) - ldq a1, 8(sp) - ldq a0, 0(sp) - - .align 3 -$do32: ldi v0, SYS_ify(osf_wait4) - callsys - bne a3, $error - - /* Copy back to proper format. */ - ldq a3, 24(sp) - beq a3, 2f - ldl t0, 0(a3) # ru_utime.tv_sec - ldl t1, 4(a3) # ru_utime.tv_usec - ldl t2, 8(a3) # ru_stime.tv_sec - ldl t3, 12(a3) # ru_stime.tv_usec - ldt $f15, 16(a3) # ru_maxrss - ldt $f16, 24(a3) # ru_ixrss - ldt $f17, 32(a3) # ru_idrss - ldt $f18, 40(a3) # ru_isrss - ldt $f19, 48(a3) # ru_minflt - ldt $f20, 56(a3) # ru_majflt - ldt $f21, 64(a3) # ru_nswap - ldt $f22, 72(a3) # ru_inblock - ldt $f23, 80(a3) # ru_oublock - ldt $f24, 88(a3) # ru_msgsend - ldt $f25, 96(a3) # ru_msgrcv - ldt $f26, 104(a3) # ru_nsignals - ldt $f27, 112(a3) # ru_nvcsw - .set noat - ldt $f28, 120(a3) # ru_nivcsw - stq t0, 0(a3) - stq t1, 8(a3) - stq t2, 16(a3) - stq t3, 24(a3) - stt $f15, 32(a3) - stt $f16, 40(a3) - stt $f17, 48(a3) - stt $f18, 56(a3) - stt $f19, 64(a3) - stt $f20, 72(a3) - stt $f21, 80(a3) - stt $f22, 88(a3) - stt $f23, 96(a3) - stt $f24, 104(a3) - stt $f25, 112(a3) - stt $f26, 120(a3) - stt $f27, 128(a3) - stt $f28, 136(a3) - .set at - -2: addq sp, 32, sp - ret - - .align 3 -$error: - addq sp, 32, sp - SYSCALL_ERROR_HANDLER - -END(WAIT4) -#endif /* __ASSUME_TIMEVAL64 */ - -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING -default_symbol_version (__wait4_tv64, __wait4, GLIBC_2.1) - -/* It seems to me to be a misfeature of the assembler that we can only - have one version-alias per symbol. So create an alias ourselves. - The 'p' is for 'public'. *Shrug* */ -strong_alias (__wait4_tv64, __wait4_tv64p) -default_symbol_version (__wait4_tv64p, wait4, GLIBC_2.1) -#else -weak_alias (__wait4, wait4) -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/wordexp.c b/sysdeps/unix/sysv/linux/alpha/wordexp.c deleted file mode 100644 index c2972e40c2..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/wordexp.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2001, 2004, 2005 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <shlib-compat.h> - -/* For Linux/Alpha we have to make the wordexp symbols versioned. */ -#define wordexp(words, pwordexp, flags) \ - __new_wordexp (words, pwordexp, flags) - -#include <posix/wordexp.c> - -versioned_symbol (libc, __new_wordexp, wordexp, GLIBC_2_2_2); - - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2_2) -/* The old, incorrect wordexp_t definition. */ -typedef struct - { - int we_wordc; /* Count of words matched. */ - char **we_wordv; /* List of expanded words. */ - int we_offs; /* Slots to reserve in `we_wordv'. */ - } old_wordexp_t; - - -int -attribute_compat_text_section -__old_wordexp (const char *words, old_wordexp_t *pwordexp, int flags) -{ - wordexp_t we; - int result; - - we.we_wordc = pwordexp->we_wordc; - we.we_wordv = pwordexp->we_wordv; - we.we_offs = pwordexp->we_offs; - - result = __new_wordexp (words, &we, flags); - - pwordexp->we_wordc = we.we_wordc; - pwordexp->we_wordv = we.we_wordv; - pwordexp->we_offs = we.we_offs; - - return result; -} -compat_symbol (libc, __old_wordexp, wordexp, GLIBC_2_1); -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/xstat.c b/sysdeps/unix/sysv/linux/alpha/xstat.c deleted file mode 100644 index b7488e425c..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/xstat.c +++ /dev/null @@ -1,64 +0,0 @@ -/* xstat using old-style Unix stat system call. - Copyright (C) 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define __xstat64 __xstat64_disable - -#include <errno.h> -#include <stddef.h> -#include <sys/stat.h> -#include <kernel_stat.h> -#include <sysdep.h> -#include <sys/syscall.h> -#include <xstatconv.h> - -#undef __xstat64 - - -/* Get information about the file NAME in BUF. */ -int -__xstat (int vers, const char *name, struct stat *buf) -{ - INTERNAL_SYSCALL_DECL (err); - int result, errno_out; - struct kernel_stat kbuf; - - if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64) - { - result = INTERNAL_SYSCALL (stat64, err, 2, name, buf); - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return result; - errno_out = INTERNAL_SYSCALL_ERRNO (result, err); - if (errno_out != ENOSYS) - goto fail; - __libc_missing_axp_stat64 = 1; - } - - result = INTERNAL_SYSCALL (stat, err, 2, name, &kbuf); - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return __xstat_conv (vers, &kbuf, buf); - errno_out = INTERNAL_SYSCALL_ERRNO (result, err); - - fail: - __set_errno (errno_out); - return -1; -} -hidden_def (__xstat) -weak_alias (__xstat, _xstat); -strong_alias (__xstat, __xstat64); -hidden_ver (__xstat, __xstat64) diff --git a/sysdeps/unix/sysv/linux/alpha/xstatconv.c b/sysdeps/unix/sysv/linux/alpha/xstatconv.c deleted file mode 100644 index a193b62ad1..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/xstatconv.c +++ /dev/null @@ -1,123 +0,0 @@ -/* Convert between the kernel's `struct stat' format, and libc's. - Copyright (C) 1997, 2003, 2004 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <string.h> -#include <sys/stat.h> -#include <kernel_stat.h> -#include <xstatconv.h> - - -int __libc_missing_axp_stat64; - -int -__xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf) -{ - switch (vers) - { - case _STAT_VER_KERNEL: - *(struct kernel_stat *) ubuf = *kbuf; - break; - - case _STAT_VER_GLIBC2: - { - struct glibc2_stat *buf = ubuf; - - buf->st_dev = kbuf->st_dev; - buf->st_ino = kbuf->st_ino; - buf->st_mode = kbuf->st_mode; - buf->st_nlink = kbuf->st_nlink; - buf->st_uid = kbuf->st_uid; - buf->st_gid = kbuf->st_gid; - buf->st_rdev = kbuf->st_rdev; - buf->st_size = kbuf->st_size; - buf->st_atime = kbuf->st_atime; - buf->st_mtime = kbuf->st_mtime; - buf->st_ctime = kbuf->st_ctime; - buf->st_blksize = kbuf->st_blksize; - buf->st_blocks = kbuf->st_blocks; - buf->st_flags = kbuf->st_flags; - buf->st_gen = kbuf->st_gen; - } - break; - - case _STAT_VER_GLIBC2_1: - { - struct glibc21_stat *buf = ubuf; - - buf->st_dev = kbuf->st_dev; - buf->st_ino = kbuf->st_ino; - buf->st_mode = kbuf->st_mode; - buf->st_nlink = kbuf->st_nlink; - buf->st_uid = kbuf->st_uid; - buf->st_gid = kbuf->st_gid; - buf->st_rdev = kbuf->st_rdev; - buf->st_size = kbuf->st_size; - buf->st_atime = kbuf->st_atime; - buf->st_mtime = kbuf->st_mtime; - buf->st_ctime = kbuf->st_ctime; - buf->st_blocks = kbuf->st_blocks; - buf->st_blksize = kbuf->st_blksize; - buf->st_flags = kbuf->st_flags; - buf->st_gen = kbuf->st_gen; - buf->__pad3 = 0; - buf->__unused[0] = 0; - buf->__unused[1] = 0; - buf->__unused[2] = 0; - buf->__unused[3] = 0; - } - break; - - case _STAT_VER_GLIBC2_3_4: - { - struct stat64 *buf = ubuf; - - buf->st_dev = kbuf->st_dev; - buf->st_ino = kbuf->st_ino; - buf->st_rdev = kbuf->st_rdev; - buf->st_size = kbuf->st_size; - buf->st_blocks = kbuf->st_blocks; - - buf->st_mode = kbuf->st_mode; - buf->st_uid = kbuf->st_uid; - buf->st_gid = kbuf->st_gid; - buf->st_blksize = kbuf->st_blksize; - buf->st_nlink = kbuf->st_nlink; - buf->__pad0 = 0; - - buf->st_atime = kbuf->st_atime; - buf->st_atimensec = 0; - buf->st_mtime = kbuf->st_mtime; - buf->st_mtimensec = 0; - buf->st_ctime = kbuf->st_ctime; - buf->st_ctimensec = 0; - - buf->__unused[0] = 0; - buf->__unused[1] = 0; - buf->__unused[2] = 0; - } - break; - - default: - __set_errno (EINVAL); - return -1; - } - - return 0; -} diff --git a/sysdeps/unix/sysv/linux/alpha/xstatconv.h b/sysdeps/unix/sysv/linux/alpha/xstatconv.h deleted file mode 100644 index 094d11e5c9..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/xstatconv.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Convert between the kernel's `struct stat' format, and libc's. - Copyright (C) 2004, 2006 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <kernel-features.h> - -extern int __libc_missing_axp_stat64 attribute_hidden; -extern int __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf) - attribute_hidden; |