mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 08:43:19 -04:00
Import sources from NetBSD, tweaked for building in FreeBSD.
This commit is contained in:
parent
3d46539c46
commit
03fcbeae91
52 changed files with 3391 additions and 0 deletions
14
lib/libc/alpha/Makefile.inc
Normal file
14
lib/libc/alpha/Makefile.inc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
# $Id$
|
||||
#
|
||||
# Machine dependent definitions for the alpha architecture.
|
||||
#
|
||||
# The alpha uses a NetBSD kernel:
|
||||
#
|
||||
NETBSD_SYSCALLS=1
|
||||
|
||||
CFLAGS+=-D__NETBSD_SYSCALLS
|
||||
|
||||
#
|
||||
# Alpha is 64-bit, so it doesn't need quad functions:
|
||||
#
|
||||
NO_QUAD=1
|
||||
78
lib/libc/alpha/SYS.h
Normal file
78
lib/libc/alpha/SYS.h
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
/* $Id$ */
|
||||
/* From: NetBSD: SYS.h,v 1.5 1997/05/02 18:15:15 kleink Exp */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <sys/netbsd_syscall.h>
|
||||
|
||||
|
||||
#define CALLSYS_ERROR(name) \
|
||||
CALLSYS_NOERROR(name); \
|
||||
br gp, LLABEL(name,0); \
|
||||
LLABEL(name,0): \
|
||||
LDGP(gp); \
|
||||
beq a3, LLABEL(name,1); \
|
||||
jmp zero, cerror; \
|
||||
LLABEL(name,1):
|
||||
|
||||
|
||||
#define SYSCALL(name) \
|
||||
LEAF(name,0); /* XXX # of args? */ \
|
||||
CALLSYS_ERROR(name)
|
||||
|
||||
#define SYSCALL_NOERROR(name) \
|
||||
LEAF(name,0); /* XXX # of args? */ \
|
||||
CALLSYS_NOERROR(name)
|
||||
|
||||
|
||||
#define RSYSCALL(name) \
|
||||
SYSCALL(name); \
|
||||
RET; \
|
||||
END(name)
|
||||
|
||||
#define RSYSCALL_NOERROR(name) \
|
||||
SYSCALL_NOERROR(name); \
|
||||
RET; \
|
||||
END(name)
|
||||
|
||||
|
||||
#define PSEUDO(label,name) \
|
||||
LEAF(label,0); /* XXX # of args? */ \
|
||||
CALLSYS_ERROR(name); \
|
||||
RET; \
|
||||
END(label);
|
||||
|
||||
#define PSEUDO_NOERROR(label,name) \
|
||||
LEAF(label,0); /* XXX # of args? */ \
|
||||
CALLSYS_NOERROR(name); \
|
||||
RET; \
|
||||
END(label);
|
||||
|
||||
#define PRSYSCALL(x) RSYSCALL(x)
|
||||
#define PPSEUDO(x,y) PSEUDO(x,y)
|
||||
48
lib/libc/alpha/gen/Makefile.inc
Normal file
48
lib/libc/alpha/gen/Makefile.inc
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
# $Id$
|
||||
|
||||
SRCS+= _setjmp.S fabs.S frexp.c infinity.c isinf.c ldexp.c modf.c setjmp.S
|
||||
SRCS+= flt_rounds.c
|
||||
SRCS+= netbsd_getcwd.c netbsd_getdtablesize.c
|
||||
|
||||
#SRCS+= flt_rounds.c fpgetmask.c fpgetround.c fpgetsticky.c fpsetmask.c \
|
||||
# fpsetround.c fpsetsticky.c
|
||||
|
||||
SRCS+= sigsetjmp.S
|
||||
SRCS+= __divqu.S __divq.S __divlu.S __divl.S
|
||||
SRCS+= __remqu.S __remq.S __remlu.S __reml.S
|
||||
|
||||
CLEANFILES+= __divqu.S __divq.S __divlu.S __divl.S
|
||||
CLEANFILES+= __remqu.S __remq.S __remlu.S __reml.S
|
||||
|
||||
|
||||
__divqu.S: ${.CURDIR}/../libc/alpha/gen/divrem.m4
|
||||
m4 -DNAME=__divqu -DOP=div -DS=false -DWORDSIZE=64 \
|
||||
${.ALLSRC} > ${.TARGET}
|
||||
|
||||
__divq.S: ${.CURDIR}/../libc/alpha/gen/divrem.m4
|
||||
m4 -DNAME=__divq -DOP=div -DS=true -DWORDSIZE=64 \
|
||||
${.ALLSRC} > ${.TARGET}
|
||||
|
||||
__divlu.S: ${.CURDIR}/../libc/alpha/gen/divrem.m4
|
||||
m4 -DNAME=__divlu -DOP=div -DS=false -DWORDSIZE=32 \
|
||||
${.ALLSRC} > ${.TARGET}
|
||||
|
||||
__divl.S: ${.CURDIR}/../libc/alpha/gen/divrem.m4
|
||||
m4 -DNAME=__divl -DOP=div -DS=true -DWORDSIZE=32 \
|
||||
${.ALLSRC} > ${.TARGET}
|
||||
|
||||
__remqu.S: ${.CURDIR}/../libc/alpha/gen/divrem.m4
|
||||
m4 -DNAME=__remqu -DOP=rem -DS=false -DWORDSIZE=64 \
|
||||
${.ALLSRC} > ${.TARGET}
|
||||
|
||||
__remq.S: ${.CURDIR}/../libc/alpha/gen/divrem.m4
|
||||
m4 -DNAME=__remq -DOP=rem -DS=true -DWORDSIZE=64 \
|
||||
${.ALLSRC} > ${.TARGET}
|
||||
|
||||
__remlu.S: ${.CURDIR}/../libc/alpha/gen/divrem.m4
|
||||
m4 -DNAME=__remlu -DOP=rem -DS=false -DWORDSIZE=32 \
|
||||
${.ALLSRC} > ${.TARGET}
|
||||
|
||||
__reml.S: ${.CURDIR}/../libc/alpha/gen/divrem.m4
|
||||
m4 -DNAME=__reml -DOP=rem -DS=true -DWORDSIZE=32 \
|
||||
${.ALLSRC} > ${.TARGET}
|
||||
123
lib/libc/alpha/gen/_setjmp.S
Normal file
123
lib/libc/alpha/gen/_setjmp.S
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
/* $NetBSD: _setjmp.S,v 1.2 1996/10/17 03:08:03 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
/*
|
||||
* C library -- _setjmp, _longjmp
|
||||
*
|
||||
* _longjmp(a,v)
|
||||
* will generate a "return(v)" from
|
||||
* the last call to
|
||||
* _setjmp(a)
|
||||
* by restoring registers from the stack,
|
||||
* The previous signal state is NOT restored.
|
||||
*/
|
||||
|
||||
.set noreorder
|
||||
|
||||
LEAF(_setjmp, 1)
|
||||
LDGP(pv)
|
||||
stq ra, (2 * 8)(a0) /* sc_pc = return address */
|
||||
stq s0, (( 9 + 4) * 8)(a0) /* saved bits of sc_regs */
|
||||
stq s1, ((10 + 4) * 8)(a0)
|
||||
stq s2, ((11 + 4) * 8)(a0)
|
||||
stq s3, ((12 + 4) * 8)(a0)
|
||||
stq s4, ((13 + 4) * 8)(a0)
|
||||
stq s5, ((14 + 4) * 8)(a0)
|
||||
stq s6, ((15 + 4) * 8)(a0)
|
||||
stq ra, ((26 + 4) * 8)(a0)
|
||||
stq sp, ((30 + 4) * 8)(a0)
|
||||
ldiq t0, 0xacedbadd /* sigcontext magic number */
|
||||
stq t0, ((31 + 4) * 8)(a0) /* magic in sc_regs[31] */
|
||||
/* Too bad we can't check if we actually used FP */
|
||||
ldiq t0, 1
|
||||
stq t0, (36 * 8)(a0) /* say we've used FP. */
|
||||
stt fs0, ((2 + 37) * 8)(a0) /* saved bits of sc_fpregs */
|
||||
stt fs1, ((3 + 37) * 8)(a0)
|
||||
stt fs2, ((4 + 37) * 8)(a0)
|
||||
stt fs3, ((5 + 37) * 8)(a0)
|
||||
stt fs4, ((6 + 37) * 8)(a0)
|
||||
stt fs5, ((7 + 37) * 8)(a0)
|
||||
stt fs6, ((8 + 37) * 8)(a0)
|
||||
stt fs7, ((9 + 37) * 8)(a0)
|
||||
mf_fpcr ft0 /* get FP control reg */
|
||||
stt ft0, (69 * 8)(a0) /* and store it in sc_fpcr */
|
||||
stq zero, (70 * 8)(a0) /* FP software control XXX */
|
||||
stq zero, (71 * 8)(a0) /* sc_reserved[0] */
|
||||
stq zero, (72 * 8)(a0) /* sc_reserved[1] */
|
||||
stq zero, (73 * 8)(a0) /* sc_xxx[0] */
|
||||
stq zero, (74 * 8)(a0) /* sc_xxx[1] */
|
||||
stq zero, (75 * 8)(a0) /* sc_xxx[2] */
|
||||
stq zero, (76 * 8)(a0) /* sc_xxx[3] */
|
||||
stq zero, (77 * 8)(a0) /* sc_xxx[4] */
|
||||
stq zero, (78 * 8)(a0) /* sc_xxx[5] */
|
||||
stq zero, (79 * 8)(a0) /* sc_xxx[6] */
|
||||
stq zero, (80 * 8)(a0) /* sc_xxx[7] */
|
||||
|
||||
mov zero, v0 /* return zero */
|
||||
RET
|
||||
END(_setjmp)
|
||||
|
||||
LEAF(_longjmp, 2)
|
||||
LDGP(pv)
|
||||
ldq t0, ((31 + 4) * 8)(a0) /* magic in sc_regs[31] */
|
||||
ldiq t1, 0xacedbadd
|
||||
cmpeq t0, t1, t0
|
||||
beq t0, botch /* If the magic was bad, punt */
|
||||
|
||||
ldq ra, (2 * 8)(a0) /* sc_pc = return address */
|
||||
ldq s0, (( 9 + 4) * 8)(a0) /* saved bits of sc_regs */
|
||||
ldq s1, ((10 + 4) * 8)(a0)
|
||||
ldq s2, ((11 + 4) * 8)(a0)
|
||||
ldq s3, ((12 + 4) * 8)(a0)
|
||||
ldq s4, ((13 + 4) * 8)(a0)
|
||||
ldq s5, ((14 + 4) * 8)(a0)
|
||||
ldq s6, ((15 + 4) * 8)(a0)
|
||||
/* ldq ra, ((26 + 4) * 8)(a0) set above */
|
||||
ldq sp, ((30 + 4) * 8)(a0)
|
||||
ldt fs0, ((2 + 37) * 8)(a0) /* saved bits of sc_fpregs */
|
||||
ldt fs1, ((3 + 37) * 8)(a0)
|
||||
ldt fs2, ((4 + 37) * 8)(a0)
|
||||
ldt fs3, ((5 + 37) * 8)(a0)
|
||||
ldt fs4, ((6 + 37) * 8)(a0)
|
||||
ldt fs5, ((7 + 37) * 8)(a0)
|
||||
ldt fs6, ((8 + 37) * 8)(a0)
|
||||
ldt fs7, ((9 + 37) * 8)(a0)
|
||||
ldt ft0, (69 * 8)(a0) /* get sc_fpcr */
|
||||
mt_fpcr ft0 /* and restore it. */
|
||||
|
||||
mov a1, v0 /* return second arg */
|
||||
RET
|
||||
|
||||
botch:
|
||||
CALL(longjmperror)
|
||||
CALL(abort)
|
||||
RET /* "can't" get here... */
|
||||
END(_longjmp)
|
||||
197
lib/libc/alpha/gen/divrem.m4
Normal file
197
lib/libc/alpha/gen/divrem.m4
Normal file
|
|
@ -0,0 +1,197 @@
|
|||
/* $NetBSD: divrem.m4,v 1.7 1996/10/17 03:08:04 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Division and remainder.
|
||||
*
|
||||
* The use of m4 is modeled after the sparc code, but the algorithm is
|
||||
* simple binary long division.
|
||||
*
|
||||
* Note that the loops could probably benefit from unrolling.
|
||||
*/
|
||||
|
||||
/*
|
||||
* M4 Parameters
|
||||
* NAME name of function to generate
|
||||
* OP OP=div: t10 / t11 -> t12; OP=rem: t10 % t11 -> t12
|
||||
* S S=true: signed; S=false: unsigned
|
||||
* WORDSIZE total number of bits
|
||||
*/
|
||||
|
||||
define(A, `t10')
|
||||
define(B, `t11')
|
||||
define(RESULT, `t12')
|
||||
|
||||
define(BIT, `t0')
|
||||
define(I, `t1')
|
||||
define(CC, `t2')
|
||||
define(T_0, `t3')
|
||||
ifelse(S, `true', `define(NEG, `t4')')
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
LEAF(NAME, 0) /* XXX */
|
||||
lda sp, -64(sp)
|
||||
stq BIT, 0(sp)
|
||||
stq I, 8(sp)
|
||||
stq CC, 16(sp)
|
||||
stq T_0, 24(sp)
|
||||
ifelse(S, `true',
|
||||
` stq NEG, 32(sp)')
|
||||
stq A, 40(sp)
|
||||
stq B, 48(sp)
|
||||
mov zero, RESULT /* Initialize result to zero */
|
||||
|
||||
ifelse(S, `true',
|
||||
`
|
||||
/* Compute sign of result. If either is negative, this is easy. */
|
||||
or A, B, NEG /* not the sign, but... */
|
||||
srl NEG, WORDSIZE - 1, NEG /* rather, or of high bits */
|
||||
blbc NEG, Ldoit /* neither negative? do it! */
|
||||
|
||||
ifelse(OP, `div',
|
||||
` xor A, B, NEG /* THIS is the sign! */
|
||||
', ` mov A, NEG /* sign follows A. */
|
||||
')
|
||||
srl NEG, WORDSIZE - 1, NEG /* make negation the low bit. */
|
||||
|
||||
srl A, WORDSIZE - 1, I /* is A negative? */
|
||||
blbc I, LnegB /* no. */
|
||||
/* A is negative; flip it. */
|
||||
ifelse(WORDSIZE, `32', `
|
||||
/* top 32 bits may be random junk */
|
||||
zap A, 0xf0, A
|
||||
')
|
||||
subq zero, A, A
|
||||
srl B, WORDSIZE - 1, I /* is B negative? */
|
||||
blbc I, Ldoit /* no. */
|
||||
LnegB:
|
||||
/* B is definitely negative, no matter how we got here. */
|
||||
ifelse(WORDSIZE, `32', `
|
||||
/* top 32 bits may be random junk */
|
||||
zap B, 0xf0, B
|
||||
')
|
||||
subq zero, B, B
|
||||
Ldoit:
|
||||
')
|
||||
ifelse(WORDSIZE, `32', `
|
||||
/*
|
||||
* Clear the top 32 bits of each operand, as they may
|
||||
* sign extension (if negated above), or random junk.
|
||||
*/
|
||||
zap A, 0xf0, A
|
||||
zap B, 0xf0, B
|
||||
')
|
||||
|
||||
/* kill the special cases. */
|
||||
beq B, Ldotrap /* division by zero! */
|
||||
|
||||
cmpult A, B, CC /* A < B? */
|
||||
/* RESULT is already zero, from above. A is untouched. */
|
||||
bne CC, Lret_result
|
||||
|
||||
cmpeq A, B, CC /* A == B? */
|
||||
cmovne CC, 1, RESULT
|
||||
cmovne CC, zero, A
|
||||
bne CC, Lret_result
|
||||
|
||||
/*
|
||||
* Find out how many bits of zeros are at the beginning of the divisor.
|
||||
*/
|
||||
LBbits:
|
||||
ldiq T_0, 1 /* I = 0; BIT = 1<<WORDSIZE-1 */
|
||||
mov zero, I
|
||||
sll T_0, WORDSIZE-1, BIT
|
||||
LBloop:
|
||||
and B, BIT, CC /* if bit in B is set, done. */
|
||||
bne CC, LAbits
|
||||
addq I, 1, I /* increment I, shift bit */
|
||||
srl BIT, 1, BIT
|
||||
cmplt I, WORDSIZE-1, CC /* if I leaves one bit, done. */
|
||||
bne CC, LBloop
|
||||
|
||||
LAbits:
|
||||
beq I, Ldodiv /* If I = 0, divide now. */
|
||||
ldiq T_0, 1 /* BIT = 1<<WORDSIZE-1 */
|
||||
sll T_0, WORDSIZE-1, BIT
|
||||
|
||||
LAloop:
|
||||
and A, BIT, CC /* if bit in A is set, done. */
|
||||
bne CC, Ldodiv
|
||||
subq I, 1, I /* decrement I, shift bit */
|
||||
srl BIT, 1, BIT
|
||||
bne I, LAloop /* If I != 0, loop again */
|
||||
|
||||
Ldodiv:
|
||||
sll B, I, B /* B <<= i */
|
||||
ldiq T_0, 1
|
||||
sll T_0, I, BIT
|
||||
|
||||
Ldivloop:
|
||||
cmpult A, B, CC
|
||||
or RESULT, BIT, T_0
|
||||
cmoveq CC, T_0, RESULT
|
||||
subq A, B, T_0
|
||||
cmoveq CC, T_0, A
|
||||
srl BIT, 1, BIT
|
||||
srl B, 1, B
|
||||
beq A, Lret_result
|
||||
bne BIT, Ldivloop
|
||||
|
||||
Lret_result:
|
||||
ifelse(OP, `div',
|
||||
`', ` mov A, RESULT
|
||||
')
|
||||
ifelse(S, `true',
|
||||
`
|
||||
/* Check to see if we should negate it. */
|
||||
subqv zero, RESULT, T_0
|
||||
cmovlbs NEG, T_0, RESULT
|
||||
')
|
||||
|
||||
ldq BIT, 0(sp)
|
||||
ldq I, 8(sp)
|
||||
ldq CC, 16(sp)
|
||||
ldq T_0, 24(sp)
|
||||
ifelse(S, `true',
|
||||
` ldq NEG, 32(sp)')
|
||||
ldq A, 40(sp)
|
||||
ldq B, 48(sp)
|
||||
lda sp, 64(sp)
|
||||
ret zero, (t9), 1
|
||||
|
||||
Ldotrap:
|
||||
ldiq a0, -2 /* This is the signal to SIGFPE! */
|
||||
call_pal PAL_gentrap
|
||||
ifelse(OP, `div',
|
||||
`', ` mov zero, A /* so that zero will be returned */
|
||||
')
|
||||
br zero, Lret_result
|
||||
|
||||
END(NAME)
|
||||
35
lib/libc/alpha/gen/fabs.S
Normal file
35
lib/libc/alpha/gen/fabs.S
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
/* $NetBSD: fabs.S,v 1.2 1996/10/17 03:08:05 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
LEAF(fabs, 1)
|
||||
cpys fzero, fa0, fv0
|
||||
RET
|
||||
END(fabs)
|
||||
57
lib/libc/alpha/gen/flt_rounds.c
Normal file
57
lib/libc/alpha/gen/flt_rounds.c
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
/* $Id$ */
|
||||
/* From: NetBSD: flt_rounds.c,v 1.2 1997/07/18 00:30:30 thorpej Exp */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995 Christopher G. Demetriou
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Christopher G. Demetriou
|
||||
* for the NetBSD Project.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <machine/float.h>
|
||||
|
||||
static const int map[] = {
|
||||
0, /* round to zero */
|
||||
3, /* round to negative infinity */
|
||||
1, /* round to nearest */
|
||||
2 /* round to positive infinity */
|
||||
};
|
||||
|
||||
int
|
||||
__flt_rounds()
|
||||
{
|
||||
double fpcrval;
|
||||
u_int64_t old;
|
||||
|
||||
__asm__("trapb");
|
||||
__asm__("mf_fpcr %0" : "=f" (fpcrval));
|
||||
__asm__("trapb");
|
||||
old = *(u_int64_t *)&fpcrval;
|
||||
|
||||
return map[(old >> 58) & 0x3];
|
||||
}
|
||||
42
lib/libc/alpha/gen/fpgetmask.c
Normal file
42
lib/libc/alpha/gen/fpgetmask.c
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
/* $NetBSD: fpgetmask.c,v 1.1 1995/04/29 05:10:55 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995 Christopher G. Demetriou
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Christopher G. Demetriou
|
||||
* for the NetBSD Project.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <ieeefp.h>
|
||||
|
||||
fp_except
|
||||
fpgetmask()
|
||||
{
|
||||
|
||||
/* XXX */
|
||||
abort();
|
||||
}
|
||||
49
lib/libc/alpha/gen/fpgetround.c
Normal file
49
lib/libc/alpha/gen/fpgetround.c
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
/* $NetBSD: fpgetround.c,v 1.1 1995/04/29 05:09:55 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995 Christopher G. Demetriou
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Christopher G. Demetriou
|
||||
* for the NetBSD Project.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <ieeefp.h>
|
||||
|
||||
fp_rnd
|
||||
fpgetround()
|
||||
{
|
||||
double fpcrval;
|
||||
u_int64_t old;
|
||||
|
||||
__asm__("trapb");
|
||||
__asm__("mf_fpcr %0" : "=f" (fpcrval));
|
||||
__asm__("trapb");
|
||||
old = *(u_int64_t *)&fpcrval;
|
||||
|
||||
return ((old >> 58) & 0x3);
|
||||
}
|
||||
42
lib/libc/alpha/gen/fpgetsticky.c
Normal file
42
lib/libc/alpha/gen/fpgetsticky.c
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
/* $NetBSD: fpgetsticky.c,v 1.1 1995/04/29 05:10:59 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995 Christopher G. Demetriou
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Christopher G. Demetriou
|
||||
* for the NetBSD Project.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <ieeefp.h>
|
||||
|
||||
fp_except
|
||||
fpgetsticky()
|
||||
{
|
||||
|
||||
/* XXX */
|
||||
abort();
|
||||
}
|
||||
43
lib/libc/alpha/gen/fpsetmask.c
Normal file
43
lib/libc/alpha/gen/fpsetmask.c
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
/* $NetBSD: fpsetmask.c,v 1.1 1995/04/29 05:11:01 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995 Christopher G. Demetriou
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Christopher G. Demetriou
|
||||
* for the NetBSD Project.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <ieeefp.h>
|
||||
|
||||
fp_except
|
||||
fpsetmask(mask)
|
||||
fp_except mask;
|
||||
{
|
||||
|
||||
/* XXX */
|
||||
abort();
|
||||
}
|
||||
58
lib/libc/alpha/gen/fpsetround.c
Normal file
58
lib/libc/alpha/gen/fpsetround.c
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
/* $NetBSD: fpsetround.c,v 1.1 1995/04/29 05:09:57 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995 Christopher G. Demetriou
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Christopher G. Demetriou
|
||||
* for the NetBSD Project.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <ieeefp.h>
|
||||
|
||||
fp_rnd
|
||||
fpsetround(rnd_dir)
|
||||
fp_rnd rnd_dir;
|
||||
{
|
||||
double fpcrval;
|
||||
u_int64_t old, new;
|
||||
|
||||
__asm__("trapb");
|
||||
__asm__("mf_fpcr %0" : "=f" (fpcrval));
|
||||
__asm__("trapb");
|
||||
old = *(u_int64_t *)&fpcrval;
|
||||
|
||||
new = old & ~(long)0x0c00000000000000;
|
||||
new = (long)rnd_dir << 58;
|
||||
*(u_int64_t *)&fpcrval = new;
|
||||
|
||||
__asm__("trapb");
|
||||
__asm__("mt_fpcr %0" : : "f" (fpcrval));
|
||||
__asm__("trapb");
|
||||
|
||||
return ((old >> 58) & 0x3);
|
||||
}
|
||||
43
lib/libc/alpha/gen/fpsetsticky.c
Normal file
43
lib/libc/alpha/gen/fpsetsticky.c
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
/* $NetBSD: fpsetsticky.c,v 1.1 1995/04/29 05:11:04 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995 Christopher G. Demetriou
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Christopher G. Demetriou
|
||||
* for the NetBSD Project.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <ieeefp.h>
|
||||
|
||||
fp_except
|
||||
fpsetsticky(sticky)
|
||||
fp_except sticky;
|
||||
{
|
||||
|
||||
/* XXX */
|
||||
abort();
|
||||
}
|
||||
53
lib/libc/alpha/gen/frexp.c
Normal file
53
lib/libc/alpha/gen/frexp.c
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
/* $NetBSD: frexp.c,v 1.1 1995/02/10 17:50:22 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <machine/ieee.h>
|
||||
#include <math.h>
|
||||
|
||||
double
|
||||
frexp(value, eptr)
|
||||
double value;
|
||||
int *eptr;
|
||||
{
|
||||
union doub {
|
||||
double v;
|
||||
struct ieee_double s;
|
||||
} u;
|
||||
|
||||
if (value) {
|
||||
u.v = value;
|
||||
*eptr = u.s.dbl_exp - (DBL_EXP_BIAS - 1);
|
||||
u.s.dbl_exp = DBL_EXP_BIAS - 1;
|
||||
return(u.v);
|
||||
} else {
|
||||
*eptr = 0;
|
||||
return((double)0);
|
||||
}
|
||||
}
|
||||
33
lib/libc/alpha/gen/infinity.c
Normal file
33
lib/libc/alpha/gen/infinity.c
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
/* $NetBSD: infinity.c,v 1.1 1995/02/10 17:50:23 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
/* bytes for +Infinity on an Alpha (IEEE double format) */
|
||||
char __infinity[] = { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f };
|
||||
52
lib/libc/alpha/gen/isinf.c
Normal file
52
lib/libc/alpha/gen/isinf.c
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
/* $NetBSD: isinf.c,v 1.1 1995/02/10 17:50:23 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <machine/ieee.h>
|
||||
#include <math.h>
|
||||
|
||||
int
|
||||
isnan(d)
|
||||
double d;
|
||||
{
|
||||
register struct ieee_double *p = (struct ieee_double *)&d;
|
||||
|
||||
return (p->dbl_exp == DBL_EXP_INFNAN &&
|
||||
(p->dbl_frach || p->dbl_fracl));
|
||||
}
|
||||
|
||||
int
|
||||
isinf(d)
|
||||
double d;
|
||||
{
|
||||
register struct ieee_double *p = (struct ieee_double *)&d;
|
||||
|
||||
return (p->dbl_exp == DBL_EXP_INFNAN &&
|
||||
!p->dbl_frach && !p->dbl_fracl);
|
||||
}
|
||||
134
lib/libc/alpha/gen/ldexp.c
Normal file
134
lib/libc/alpha/gen/ldexp.c
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
/* $NetBSD: ldexp.c,v 1.1 1995/02/10 17:50:24 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <machine/ieee.h>
|
||||
#include <errno.h>
|
||||
#include <math.h>
|
||||
|
||||
/*
|
||||
* double ldexp(double val, int exp)
|
||||
* returns: val * (2**exp)
|
||||
*/
|
||||
double
|
||||
ldexp(val, exp)
|
||||
double val;
|
||||
int exp;
|
||||
{
|
||||
register int oldexp, newexp, mulexp;
|
||||
union doub {
|
||||
double v;
|
||||
struct ieee_double s;
|
||||
} u, mul;
|
||||
|
||||
/*
|
||||
* If input is zero, or no change, just return input.
|
||||
* Likewise, if input is Inf or NaN, just return it.
|
||||
*/
|
||||
u.v = val;
|
||||
oldexp = u.s.dbl_exp;
|
||||
if (val == 0 || exp == 0 || oldexp == DBL_EXP_INFNAN)
|
||||
return (val);
|
||||
|
||||
/*
|
||||
* Compute new exponent and check for over/under flow.
|
||||
* Underflow, unfortunately, could mean switching to denormal.
|
||||
* If result out of range, set ERANGE and return 0 if too small
|
||||
* or Inf if too big, with the same sign as the input value.
|
||||
*/
|
||||
newexp = oldexp + exp;
|
||||
if (newexp >= DBL_EXP_INFNAN) {
|
||||
/* u.s.dbl_sign = val < 0; -- already set */
|
||||
u.s.dbl_exp = DBL_EXP_INFNAN;
|
||||
u.s.dbl_frach = u.s.dbl_fracl = 0;
|
||||
errno = ERANGE;
|
||||
return (u.v); /* Inf */
|
||||
}
|
||||
if (newexp <= 0) {
|
||||
/*
|
||||
* The output number is either a denormal or underflows
|
||||
* (see comments in machine/ieee.h).
|
||||
*/
|
||||
if (newexp <= -DBL_FRACBITS) {
|
||||
/* u.s.dbl_sign = val < 0; -- already set */
|
||||
u.s.dbl_exp = 0;
|
||||
u.s.dbl_frach = u.s.dbl_fracl = 0;
|
||||
errno = ERANGE;
|
||||
return (u.v); /* zero */
|
||||
}
|
||||
/*
|
||||
* We are going to produce a denorm. Our `exp' argument
|
||||
* might be as small as -2097, and we cannot compute
|
||||
* 2^-2097, so we may have to do this as many as three
|
||||
* steps (not just two, as for positive `exp's below).
|
||||
*/
|
||||
mul.v = 0;
|
||||
while (exp <= -DBL_EXP_BIAS) {
|
||||
mul.s.dbl_exp = 1;
|
||||
val *= mul.v;
|
||||
exp += DBL_EXP_BIAS - 1;
|
||||
}
|
||||
mul.s.dbl_exp = exp + DBL_EXP_BIAS;
|
||||
val *= mul.v;
|
||||
return (val);
|
||||
}
|
||||
|
||||
/*
|
||||
* Newexp is positive.
|
||||
*
|
||||
* If oldexp is zero, we are starting with a denorm, and simply
|
||||
* adjusting the exponent will produce bogus answers. We need
|
||||
* to fix that first.
|
||||
*/
|
||||
if (oldexp == 0) {
|
||||
/*
|
||||
* Multiply by 2^mulexp to make the number normalizable.
|
||||
* We cannot multiply by more than 2^1023, but `exp'
|
||||
* argument might be as large as 2046. A single
|
||||
* adjustment, however, will normalize the number even
|
||||
* for huge `exp's, and then we can use exponent
|
||||
* arithmetic just as for normal `double's.
|
||||
*/
|
||||
mulexp = exp <= DBL_EXP_BIAS ? exp : DBL_EXP_BIAS;
|
||||
mul.v = 0;
|
||||
mul.s.dbl_exp = mulexp + DBL_EXP_BIAS;
|
||||
val *= mul.v;
|
||||
if (mulexp == exp)
|
||||
return (val);
|
||||
u.v = val;
|
||||
newexp -= mulexp;
|
||||
}
|
||||
|
||||
/*
|
||||
* Both oldexp and newexp are positive; just replace the
|
||||
* old exponent with the new one.
|
||||
*/
|
||||
u.s.dbl_exp = newexp;
|
||||
return (u.v);
|
||||
}
|
||||
104
lib/libc/alpha/gen/modf.c
Normal file
104
lib/libc/alpha/gen/modf.c
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
/* $NetBSD: modf.c,v 1.1 1995/02/10 17:50:25 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <machine/ieee.h>
|
||||
#include <errno.h>
|
||||
#include <math.h>
|
||||
|
||||
/*
|
||||
* double modf(double val, double *iptr)
|
||||
* returns: f and i such that |f| < 1.0, (f + i) = val, and
|
||||
* sign(f) == sign(i) == sign(val).
|
||||
*
|
||||
* Beware signedness when doing subtraction, and also operand size!
|
||||
*/
|
||||
double
|
||||
modf(val, iptr)
|
||||
double val, *iptr;
|
||||
{
|
||||
union doub {
|
||||
double v;
|
||||
struct ieee_double s;
|
||||
} u, v;
|
||||
u_int64_t frac;
|
||||
|
||||
/*
|
||||
* If input is Inf or NaN, return it and leave i alone.
|
||||
*/
|
||||
u.v = val;
|
||||
if (u.s.dbl_exp == DBL_EXP_INFNAN)
|
||||
return (u.v);
|
||||
|
||||
/*
|
||||
* If input can't have a fractional part, return
|
||||
* (appropriately signed) zero, and make i be the input.
|
||||
*/
|
||||
if ((int)u.s.dbl_exp - DBL_EXP_BIAS > DBL_FRACBITS - 1) {
|
||||
*iptr = u.v;
|
||||
v.v = 0.0;
|
||||
v.s.dbl_sign = u.s.dbl_sign;
|
||||
return (v.v);
|
||||
}
|
||||
|
||||
/*
|
||||
* If |input| < 1.0, return it, and set i to the appropriately
|
||||
* signed zero.
|
||||
*/
|
||||
if (u.s.dbl_exp < DBL_EXP_BIAS) {
|
||||
v.v = 0.0;
|
||||
v.s.dbl_sign = u.s.dbl_sign;
|
||||
*iptr = v.v;
|
||||
return (u.v);
|
||||
}
|
||||
|
||||
/*
|
||||
* There can be a fractional part of the input.
|
||||
* If you look at the math involved for a few seconds, it's
|
||||
* plain to see that the integral part is the input, with the
|
||||
* low (DBL_FRACBITS - (exponent - DBL_EXP_BIAS)) bits zeroed,
|
||||
* the the fractional part is the part with the rest of the
|
||||
* bits zeroed. Just zeroing the high bits to get the
|
||||
* fractional part would yield a fraction in need of
|
||||
* normalization. Therefore, we take the easy way out, and
|
||||
* just use subtraction to get the fractional part.
|
||||
*/
|
||||
v.v = u.v;
|
||||
/* Zero the low bits of the fraction, the sleazy way. */
|
||||
frac = ((u_int64_t)v.s.dbl_frach << 32) + v.s.dbl_fracl;
|
||||
frac >>= DBL_FRACBITS - (u.s.dbl_exp - DBL_EXP_BIAS);
|
||||
frac <<= DBL_FRACBITS - (u.s.dbl_exp - DBL_EXP_BIAS);
|
||||
v.s.dbl_fracl = frac & 0xffffffff;
|
||||
v.s.dbl_frach = frac >> 32;
|
||||
*iptr = v.v;
|
||||
|
||||
u.v -= v.v;
|
||||
u.s.dbl_sign = v.s.dbl_sign;
|
||||
return (u.v);
|
||||
}
|
||||
230
lib/libc/alpha/gen/netbsd_getcwd.c
Normal file
230
lib/libc/alpha/gen/netbsd_getcwd.c
Normal file
|
|
@ -0,0 +1,230 @@
|
|||
/* $Id$ */
|
||||
/* From: NetBSD: getcwd.c,v 1.7 1997/07/21 14:07:04 jtc Exp */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1989, 1991, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
#include <dirent.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define ISDOT(dp) \
|
||||
(dp->d_name[0] == '.' && (dp->d_name[1] == '\0' || \
|
||||
(dp->d_name[1] == '.' && dp->d_name[2] == '\0')))
|
||||
|
||||
char *
|
||||
getcwd(pt, size)
|
||||
char *pt;
|
||||
size_t size;
|
||||
{
|
||||
register struct dirent *dp;
|
||||
register DIR *dir;
|
||||
register dev_t dev;
|
||||
register ino_t ino;
|
||||
register int first;
|
||||
register char *bpt, *bup;
|
||||
struct stat s;
|
||||
dev_t root_dev;
|
||||
ino_t root_ino;
|
||||
size_t ptsize, upsize;
|
||||
int save_errno;
|
||||
char *ept, *eup, *up;
|
||||
|
||||
/*
|
||||
* If no buffer specified by the user, allocate one as necessary.
|
||||
* If a buffer is specified, the size has to be non-zero. The path
|
||||
* is built from the end of the buffer backwards.
|
||||
*/
|
||||
if (pt) {
|
||||
ptsize = 0;
|
||||
if (!size) {
|
||||
errno = EINVAL;
|
||||
return (NULL);
|
||||
}
|
||||
ept = pt + size;
|
||||
} else {
|
||||
if ((pt = malloc(ptsize = 1024 - 4)) == NULL)
|
||||
return (NULL);
|
||||
ept = pt + ptsize;
|
||||
}
|
||||
bpt = ept - 1;
|
||||
*bpt = '\0';
|
||||
|
||||
/*
|
||||
* Allocate bytes (1024 - malloc space) for the string of "../"'s.
|
||||
* Should always be enough (it's 340 levels). If it's not, allocate
|
||||
* as necessary. Special * case the first stat, it's ".", not "..".
|
||||
*/
|
||||
if ((up = malloc(upsize = 1024 - 4)) == NULL)
|
||||
goto err;
|
||||
eup = up + MAXPATHLEN;
|
||||
bup = up;
|
||||
up[0] = '.';
|
||||
up[1] = '\0';
|
||||
|
||||
/* Save root values, so know when to stop. */
|
||||
if (stat("/", &s))
|
||||
goto err;
|
||||
root_dev = s.st_dev;
|
||||
root_ino = s.st_ino;
|
||||
|
||||
errno = 0; /* XXX readdir has no error return. */
|
||||
|
||||
for (first = 1;; first = 0) {
|
||||
/* Stat the current level. */
|
||||
if (lstat(up, &s))
|
||||
goto err;
|
||||
|
||||
/* Save current node values. */
|
||||
ino = s.st_ino;
|
||||
dev = s.st_dev;
|
||||
|
||||
/* Check for reaching root. */
|
||||
if (root_dev == dev && root_ino == ino) {
|
||||
*--bpt = '/';
|
||||
/*
|
||||
* It's unclear that it's a requirement to copy the
|
||||
* path to the beginning of the buffer, but it's always
|
||||
* been that way and stuff would probably break.
|
||||
*/
|
||||
bcopy(bpt, pt, ept - bpt);
|
||||
free(up);
|
||||
return (pt);
|
||||
}
|
||||
|
||||
/*
|
||||
* Build pointer to the parent directory, allocating memory
|
||||
* as necessary. Max length is 3 for "../", the largest
|
||||
* possible component name, plus a trailing NULL.
|
||||
*/
|
||||
if (bup + 3 + MAXNAMLEN + 1 >= eup) {
|
||||
if ((up = realloc(up, upsize *= 2)) == NULL)
|
||||
goto err;
|
||||
bup = up;
|
||||
eup = up + upsize;
|
||||
}
|
||||
*bup++ = '.';
|
||||
*bup++ = '.';
|
||||
*bup = '\0';
|
||||
|
||||
/* Open and stat parent directory. */
|
||||
if (!(dir = opendir(up)) || fstat(dirfd(dir), &s))
|
||||
goto err;
|
||||
|
||||
/* Add trailing slash for next directory. */
|
||||
*bup++ = '/';
|
||||
|
||||
/*
|
||||
* If it's a mount point, have to stat each element because
|
||||
* the inode number in the directory is for the entry in the
|
||||
* parent directory, not the inode number of the mounted file.
|
||||
*/
|
||||
save_errno = 0;
|
||||
if (s.st_dev == dev) {
|
||||
for (;;) {
|
||||
if (!(dp = readdir(dir)))
|
||||
goto notfound;
|
||||
if (dp->d_fileno == ino)
|
||||
break;
|
||||
}
|
||||
} else
|
||||
for (;;) {
|
||||
if (!(dp = readdir(dir)))
|
||||
goto notfound;
|
||||
if (ISDOT(dp))
|
||||
continue;
|
||||
bcopy(dp->d_name, bup, dp->d_namlen + 1);
|
||||
|
||||
/* Save the first error for later. */
|
||||
if (lstat(up, &s)) {
|
||||
if (!save_errno)
|
||||
save_errno = errno;
|
||||
errno = 0;
|
||||
continue;
|
||||
}
|
||||
if (s.st_dev == dev && s.st_ino == ino)
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for length of the current name, preceding slash,
|
||||
* leading slash.
|
||||
*/
|
||||
if (bpt - pt <= dp->d_namlen + (first ? 1 : 2)) {
|
||||
size_t len, off;
|
||||
|
||||
if (!ptsize) {
|
||||
errno = ERANGE;
|
||||
goto err;
|
||||
}
|
||||
off = bpt - pt;
|
||||
len = ept - bpt;
|
||||
if ((pt = realloc(pt, ptsize *= 2)) == NULL)
|
||||
goto err;
|
||||
bpt = pt + off;
|
||||
ept = pt + ptsize;
|
||||
bcopy(bpt, ept - len, len);
|
||||
bpt = ept - len;
|
||||
}
|
||||
if (!first)
|
||||
*--bpt = '/';
|
||||
bpt -= dp->d_namlen;
|
||||
bcopy(dp->d_name, bpt, dp->d_namlen);
|
||||
(void)closedir(dir);
|
||||
|
||||
/* Truncate any file name. */
|
||||
*bup = '\0';
|
||||
}
|
||||
|
||||
notfound:
|
||||
/*
|
||||
* If readdir set errno, use it, not any saved error; otherwise,
|
||||
* didn't find the current directory in its parent directory, set
|
||||
* errno to ENOENT.
|
||||
*/
|
||||
if (!errno)
|
||||
errno = save_errno ? save_errno : ENOENT;
|
||||
/* FALLTHROUGH */
|
||||
err:
|
||||
if (ptsize)
|
||||
free(pt);
|
||||
free(up);
|
||||
return (NULL);
|
||||
}
|
||||
21
lib/libc/alpha/gen/netbsd_getdtablesize.c
Normal file
21
lib/libc/alpha/gen/netbsd_getdtablesize.c
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
/* $Id$ */
|
||||
/* From: NetBSD: getdtablesize.c,v 1.5 1997/07/21 14:06:26 jtc Exp */
|
||||
|
||||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
int
|
||||
getdtablesize()
|
||||
{
|
||||
return sysconf(_SC_OPEN_MAX);
|
||||
}
|
||||
124
lib/libc/alpha/gen/setjmp.S
Normal file
124
lib/libc/alpha/gen/setjmp.S
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
/* $NetBSD: setjmp.S,v 1.3 1997/12/05 02:06:27 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
/*
|
||||
* C library -- setjmp, longjmp
|
||||
*
|
||||
* longjmp(a,v)
|
||||
* will generate a "return(v)" from
|
||||
* the last call to
|
||||
* setjmp(a)
|
||||
* by restoring registers from the stack,
|
||||
* and the previous signal state.
|
||||
*/
|
||||
|
||||
.set noreorder
|
||||
|
||||
LEAF(setjmp, 1)
|
||||
LDGP(pv)
|
||||
stq ra, (2 * 8)(a0) /* sc_pc = return address */
|
||||
stq s0, (( 9 + 4) * 8)(a0) /* saved bits of sc_regs */
|
||||
stq s1, ((10 + 4) * 8)(a0)
|
||||
stq s2, ((11 + 4) * 8)(a0)
|
||||
stq s3, ((12 + 4) * 8)(a0)
|
||||
stq s4, ((13 + 4) * 8)(a0)
|
||||
stq s5, ((14 + 4) * 8)(a0)
|
||||
stq s6, ((15 + 4) * 8)(a0)
|
||||
stq ra, ((26 + 4) * 8)(a0)
|
||||
stq sp, ((30 + 4) * 8)(a0)
|
||||
|
||||
/*
|
||||
* get signal information
|
||||
*/
|
||||
mov a0, s0 /* squirrel away ptr to sc */
|
||||
|
||||
/* see what's blocked */
|
||||
mov zero, a0
|
||||
CALL(sigblock) /* see what's blocked */
|
||||
stq v0, (1 * 8)(s0) /* and remember it in sc_mask */
|
||||
|
||||
lda sp, -24(sp) /* sizeof struct sigaltstack */
|
||||
mov zero, a0
|
||||
mov sp, a1
|
||||
CALL(__sigaltstack14)
|
||||
ldl t0, 16(sp) /* offset of ss_flags */
|
||||
lda sp, 24(sp) /* sizeof struct sigaltstack */
|
||||
ldq ra, ((26 + 4) * 8)(s0) /* restore return address */
|
||||
blt v0, botch /* check for error */
|
||||
and t0, 0x1, t0 /* get SA_ONSTACK flag */
|
||||
stq t0, (0 * 8)(s0) /* and save it in sc_onstack */
|
||||
/*
|
||||
* Restore old s0 and a0, and continue saving registers
|
||||
*/
|
||||
mov s0, a0
|
||||
ldq s0, (( 9 + 4) * 8)(a0)
|
||||
|
||||
ldiq t0, 0xacedbade /* sigcontext magic number */
|
||||
stq t0, ((31 + 4) * 8)(a0) /* magic in sc_regs[31] */
|
||||
/* Too bad we can't check if we actually used FP */
|
||||
ldiq t0, 1
|
||||
stq t0, (36 * 8)(a0) /* say we've used FP. */
|
||||
stt fs0, ((2 + 37) * 8)(a0) /* saved bits of sc_fpregs */
|
||||
stt fs1, ((3 + 37) * 8)(a0)
|
||||
stt fs2, ((4 + 37) * 8)(a0)
|
||||
stt fs3, ((5 + 37) * 8)(a0)
|
||||
stt fs4, ((6 + 37) * 8)(a0)
|
||||
stt fs5, ((7 + 37) * 8)(a0)
|
||||
stt fs6, ((8 + 37) * 8)(a0)
|
||||
stt fs7, ((9 + 37) * 8)(a0)
|
||||
mf_fpcr ft0 /* get FP control reg */
|
||||
stt ft0, (69 * 8)(a0) /* and store it in sc_fpcr */
|
||||
stq zero, (70 * 8)(a0) /* FP software control XXX */
|
||||
stq zero, (71 * 8)(a0) /* sc_reserved[0] */
|
||||
stq zero, (72 * 8)(a0) /* sc_reserved[1] */
|
||||
stq zero, (73 * 8)(a0) /* sc_xxx[0] */
|
||||
stq zero, (74 * 8)(a0) /* sc_xxx[1] */
|
||||
stq zero, (75 * 8)(a0) /* sc_xxx[2] */
|
||||
stq zero, (76 * 8)(a0) /* sc_xxx[3] */
|
||||
stq zero, (77 * 8)(a0) /* sc_xxx[4] */
|
||||
stq zero, (78 * 8)(a0) /* sc_xxx[5] */
|
||||
stq zero, (79 * 8)(a0) /* sc_xxx[6] */
|
||||
stq zero, (80 * 8)(a0) /* sc_xxx[7] */
|
||||
|
||||
mov zero, v0 /* return zero */
|
||||
RET
|
||||
END(setjmp)
|
||||
|
||||
LEAF(longjmp, 2)
|
||||
LDGP(pv)
|
||||
stq a1, (( 0 + 4) * 8)(a0) /* save return value */
|
||||
CALL(sigreturn) /* use sigreturn to return */
|
||||
|
||||
botch:
|
||||
CALL(longjmperror)
|
||||
CALL(abort)
|
||||
RET /* "can't" get here... */
|
||||
END(longjmp)
|
||||
62
lib/libc/alpha/gen/sigsetjmp.S
Normal file
62
lib/libc/alpha/gen/sigsetjmp.S
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
/* $NetBSD: sigsetjmp.S,v 1.2 1996/10/17 03:08:07 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
/*
|
||||
* C library -- sigsetjmp, siglongjmp
|
||||
*
|
||||
* siglongjmp(a,v)
|
||||
* will generate a "return(v)" from
|
||||
* the last call to
|
||||
* sigsetjmp(a, mask)
|
||||
* by restoring registers from the stack.
|
||||
* If `mask' is non-zero, the previous signal
|
||||
* state will be restored.
|
||||
*/
|
||||
|
||||
.set noreorder
|
||||
|
||||
LEAF(sigsetjmp, 2)
|
||||
LDGP(pv)
|
||||
stq a1, (81 * 8)(a0) /* save the mask */
|
||||
bne a1, Lsavesig /* if !zero, save signals */
|
||||
jmp zero, _setjmp /* else don't. */
|
||||
Lsavesig:
|
||||
jmp zero, setjmp
|
||||
END(sigsetjmp)
|
||||
|
||||
LEAF(siglongjmp, 2)
|
||||
LDGP(pv)
|
||||
ldq t0, (81 * 8)(a0) /* get the mask */
|
||||
bne t0, Lrestoresig /* if !zero, restore signals */
|
||||
jmp zero, _longjmp
|
||||
Lrestoresig:
|
||||
jmp zero, longjmp
|
||||
END(siglongjmp)
|
||||
3
lib/libc/alpha/net/Makefile.inc
Normal file
3
lib/libc/alpha/net/Makefile.inc
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# $Id$
|
||||
|
||||
SRCS+= htonl.S htons.S ntohl.S ntohs.S
|
||||
47
lib/libc/alpha/net/byte_swap_2.S
Normal file
47
lib/libc/alpha/net/byte_swap_2.S
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
/* $NetBSD: byte_swap_2.S,v 1.2 1996/10/17 03:08:08 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#ifndef NAME
|
||||
#define NAME byte_swap_2
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Byte-swap a 2-byte quantity. (Convert 0x0123 to 0x2301.)
|
||||
*
|
||||
* Argument is an unsigned 2-byte integer (u_int16_t).
|
||||
*/
|
||||
LEAF(NAME, 1) /* a0 contains 0x0123 */
|
||||
extbl a0, 0, t0 /* t0 = 0x 23 */
|
||||
extbl a0, 1, t1 /* t1 = 0x 01 */
|
||||
sll t0, 8, t0 /* t1 = 0x23 */
|
||||
or t0, t1, v0 /* v0 = 0x2301 */
|
||||
RET
|
||||
END(NAME)
|
||||
53
lib/libc/alpha/net/byte_swap_4.S
Normal file
53
lib/libc/alpha/net/byte_swap_4.S
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
/* $NetBSD: byte_swap_4.S,v 1.2 1996/10/17 03:08:09 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#ifndef NAME
|
||||
#define NAME byte_swap_4
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Byte-swap a 4-byte quantity. (Convert 0x01234567 to 0x67452301.)
|
||||
*
|
||||
* Argument is an unsigned 4-byte integer (u_int32_t).
|
||||
*/
|
||||
LEAF(NAME, 1) /* a0 contains 0x01234567 */
|
||||
extbl a0, 0, t0 /* t0 = 0x 67 */
|
||||
extbl a0, 1, t1 /* t1 = 0x 45 */
|
||||
extbl a0, 2, t2 /* t2 = 0x 23 */
|
||||
extbl a0, 3, t3 /* t3 = 0x 01 */
|
||||
sll t0, 24, t0 /* t0 = 0x67 */
|
||||
sll t1, 16, t1 /* t1 = 0x 45 */
|
||||
sll t2, 8, t2 /* t2 = 0x 23 */
|
||||
or t3, t0, v0 /* v0 = 0x67 01 */
|
||||
or t1, t2, t1 /* t1 = 0x 4523 */
|
||||
or t1, v0, v0 /* v0 = 0x67452301 */
|
||||
RET
|
||||
END(NAME)
|
||||
32
lib/libc/alpha/net/htonl.S
Normal file
32
lib/libc/alpha/net/htonl.S
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
/* $NetBSD: htonl.S,v 1.1 1996/04/17 22:36:52 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#define NAME htonl
|
||||
|
||||
#include "byte_swap_4.S"
|
||||
32
lib/libc/alpha/net/htons.S
Normal file
32
lib/libc/alpha/net/htons.S
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
/* $NetBSD: htons.S,v 1.1 1996/04/17 22:36:54 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#define NAME htons
|
||||
|
||||
#include "byte_swap_2.S"
|
||||
32
lib/libc/alpha/net/ntohl.S
Normal file
32
lib/libc/alpha/net/ntohl.S
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
/* $NetBSD: ntohl.S,v 1.1 1996/04/17 22:36:57 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#define NAME ntohl
|
||||
|
||||
#include "byte_swap_4.S"
|
||||
32
lib/libc/alpha/net/ntohs.S
Normal file
32
lib/libc/alpha/net/ntohs.S
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
/* $NetBSD: ntohs.S,v 1.1 1996/04/17 22:37:02 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#define NAME ntohs
|
||||
|
||||
#include "byte_swap_2.S"
|
||||
3
lib/libc/alpha/stdlib/Makefile.inc
Normal file
3
lib/libc/alpha/stdlib/Makefile.inc
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# $Id$
|
||||
|
||||
MDSRCS+= abs.c div.c labs.c ldiv.c netbsd_malloc.c
|
||||
436
lib/libc/alpha/stdlib/netbsd_malloc.c
Normal file
436
lib/libc/alpha/stdlib/netbsd_malloc.c
Normal file
|
|
@ -0,0 +1,436 @@
|
|||
/* $Id$
|
||||
/* From: NetBSD: malloc.c,v 1.10 1997/07/21 14:08:55 jtc Exp */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1983 Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
/*
|
||||
* malloc.c (Caltech) 2/21/82
|
||||
* Chris Kingsley, kingsley@cit-20.
|
||||
*
|
||||
* This is a very fast storage allocator. It allocates blocks of a small
|
||||
* number of different sizes, and keeps free lists of each size. Blocks that
|
||||
* don't exactly fit are passed up to the next larger size. In this
|
||||
* implementation, the available sizes are 2^n-4 (or 2^n-10) bytes long.
|
||||
* This is designed for use in a virtual memory environment.
|
||||
*/
|
||||
|
||||
/* include "namespace.h" */
|
||||
#if defined(DEBUG) || defined(RCHECK) || defined(MSTATS)
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define NULL 0
|
||||
|
||||
|
||||
/*
|
||||
* The overhead on a block is at least 4 bytes. When free, this space
|
||||
* contains a pointer to the next free block, and the bottom two bits must
|
||||
* be zero. When in use, the first byte is set to MAGIC, and the second
|
||||
* byte is the size index. The remaining bytes are for alignment.
|
||||
* If range checking is enabled then a second word holds the size of the
|
||||
* requested block, less 1, rounded up to a multiple of sizeof(RMAGIC).
|
||||
* The order of elements is critical: ov_magic must overlay the low order
|
||||
* bits of ov_next, and ov_magic can not be a valid ov_next bit pattern.
|
||||
*/
|
||||
union overhead {
|
||||
union overhead *ov_next; /* when free */
|
||||
struct {
|
||||
u_char ovu_magic; /* magic number */
|
||||
u_char ovu_index; /* bucket # */
|
||||
#ifdef RCHECK
|
||||
u_short ovu_rmagic; /* range magic number */
|
||||
u_long ovu_size; /* actual block size */
|
||||
#endif
|
||||
} ovu;
|
||||
#define ov_magic ovu.ovu_magic
|
||||
#define ov_index ovu.ovu_index
|
||||
#define ov_rmagic ovu.ovu_rmagic
|
||||
#define ov_size ovu.ovu_size
|
||||
};
|
||||
|
||||
#define MAGIC 0xef /* magic # on accounting info */
|
||||
#define RMAGIC 0x5555 /* magic # on range info */
|
||||
|
||||
#ifdef RCHECK
|
||||
#define RSLOP sizeof (u_short)
|
||||
#else
|
||||
#define RSLOP 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* nextf[i] is the pointer to the next free block of size 2^(i+3). The
|
||||
* smallest allocatable block is 8 bytes. The overhead information
|
||||
* precedes the data area returned to the user.
|
||||
*/
|
||||
#define NBUCKETS 30
|
||||
static union overhead *nextf[NBUCKETS];
|
||||
|
||||
static int pagesz; /* page size */
|
||||
static int pagebucket; /* page size bucket */
|
||||
|
||||
#ifdef MSTATS
|
||||
/*
|
||||
* nmalloc[i] is the difference between the number of mallocs and frees
|
||||
* for a given block size.
|
||||
*/
|
||||
static u_int nmalloc[NBUCKETS];
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
static void morecore __P((int));
|
||||
static int findbucket __P((union overhead *, int));
|
||||
#ifdef MSTATS
|
||||
void mstats __P((char *));
|
||||
#endif
|
||||
|
||||
#if defined(DEBUG) || defined(RCHECK)
|
||||
#define ASSERT(p) if (!(p)) botch(__STRING(p))
|
||||
|
||||
static botch __P((char *));
|
||||
|
||||
static
|
||||
botch(s)
|
||||
char *s;
|
||||
{
|
||||
fprintf(stderr, "\r\nassertion botched: %s\r\n", s);
|
||||
(void) fflush(stderr); /* just in case user buffered it */
|
||||
abort();
|
||||
}
|
||||
#else
|
||||
#define ASSERT(p)
|
||||
#endif
|
||||
|
||||
void *
|
||||
malloc(nbytes)
|
||||
size_t nbytes;
|
||||
{
|
||||
register union overhead *op;
|
||||
register int bucket;
|
||||
register long n;
|
||||
register unsigned amt;
|
||||
|
||||
/*
|
||||
* First time malloc is called, setup page size and
|
||||
* align break pointer so all data will be page aligned.
|
||||
*/
|
||||
if (pagesz == 0) {
|
||||
pagesz = n = getpagesize();
|
||||
op = (union overhead *)sbrk(0);
|
||||
n = n - sizeof (*op) - ((long)op & (n - 1));
|
||||
if (n < 0)
|
||||
n += pagesz;
|
||||
if (n) {
|
||||
if (sbrk(n) == (char *)-1)
|
||||
return (NULL);
|
||||
}
|
||||
bucket = 0;
|
||||
amt = 8;
|
||||
while (pagesz > amt) {
|
||||
amt <<= 1;
|
||||
bucket++;
|
||||
}
|
||||
pagebucket = bucket;
|
||||
}
|
||||
/*
|
||||
* Convert amount of memory requested into closest block size
|
||||
* stored in hash buckets which satisfies request.
|
||||
* Account for space used per block for accounting.
|
||||
*/
|
||||
if (nbytes <= (n = pagesz - sizeof (*op) - RSLOP)) {
|
||||
#ifndef RCHECK
|
||||
amt = 8; /* size of first bucket */
|
||||
bucket = 0;
|
||||
#else
|
||||
amt = 16; /* size of first bucket */
|
||||
bucket = 1;
|
||||
#endif
|
||||
n = -((long)sizeof (*op) + RSLOP);
|
||||
} else {
|
||||
amt = pagesz;
|
||||
bucket = pagebucket;
|
||||
}
|
||||
while (nbytes > amt + n) {
|
||||
amt <<= 1;
|
||||
if (amt == 0)
|
||||
return (NULL);
|
||||
bucket++;
|
||||
}
|
||||
/*
|
||||
* If nothing in hash bucket right now,
|
||||
* request more memory from the system.
|
||||
*/
|
||||
if ((op = nextf[bucket]) == NULL) {
|
||||
morecore(bucket);
|
||||
if ((op = nextf[bucket]) == NULL)
|
||||
return (NULL);
|
||||
}
|
||||
/* remove from linked list */
|
||||
nextf[bucket] = op->ov_next;
|
||||
op->ov_magic = MAGIC;
|
||||
op->ov_index = bucket;
|
||||
#ifdef MSTATS
|
||||
nmalloc[bucket]++;
|
||||
#endif
|
||||
#ifdef RCHECK
|
||||
/*
|
||||
* Record allocated size of block and
|
||||
* bound space with magic numbers.
|
||||
*/
|
||||
op->ov_size = (nbytes + RSLOP - 1) & ~(RSLOP - 1);
|
||||
op->ov_rmagic = RMAGIC;
|
||||
*(u_short *)((caddr_t)(op + 1) + op->ov_size) = RMAGIC;
|
||||
#endif
|
||||
return ((char *)(op + 1));
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate more memory to the indicated bucket.
|
||||
*/
|
||||
static void
|
||||
morecore(bucket)
|
||||
int bucket;
|
||||
{
|
||||
register union overhead *op;
|
||||
register long sz; /* size of desired block */
|
||||
long amt; /* amount to allocate */
|
||||
int nblks; /* how many blocks we get */
|
||||
|
||||
/*
|
||||
* sbrk_size <= 0 only for big, FLUFFY, requests (about
|
||||
* 2^30 bytes on a VAX, I think) or for a negative arg.
|
||||
*/
|
||||
sz = 1 << (bucket + 3);
|
||||
#ifdef DEBUG
|
||||
ASSERT(sz > 0);
|
||||
#else
|
||||
if (sz <= 0)
|
||||
return;
|
||||
#endif
|
||||
if (sz < pagesz) {
|
||||
amt = pagesz;
|
||||
nblks = amt / sz;
|
||||
} else {
|
||||
amt = sz + pagesz;
|
||||
nblks = 1;
|
||||
}
|
||||
op = (union overhead *)sbrk(amt);
|
||||
/* no more room! */
|
||||
if ((long)op == -1)
|
||||
return;
|
||||
/*
|
||||
* Add new memory allocated to that on
|
||||
* free list for this hash bucket.
|
||||
*/
|
||||
nextf[bucket] = op;
|
||||
while (--nblks > 0) {
|
||||
op->ov_next = (union overhead *)((caddr_t)op + sz);
|
||||
op = (union overhead *)((caddr_t)op + sz);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
free(cp)
|
||||
void *cp;
|
||||
{
|
||||
register long size;
|
||||
register union overhead *op;
|
||||
|
||||
if (cp == NULL)
|
||||
return;
|
||||
op = (union overhead *)((caddr_t)cp - sizeof (union overhead));
|
||||
#ifdef DEBUG
|
||||
ASSERT(op->ov_magic == MAGIC); /* make sure it was in use */
|
||||
#else
|
||||
if (op->ov_magic != MAGIC)
|
||||
return; /* sanity */
|
||||
#endif
|
||||
#ifdef RCHECK
|
||||
ASSERT(op->ov_rmagic == RMAGIC);
|
||||
ASSERT(*(u_short *)((caddr_t)(op + 1) + op->ov_size) == RMAGIC);
|
||||
#endif
|
||||
size = op->ov_index;
|
||||
ASSERT(size < NBUCKETS);
|
||||
op->ov_next = nextf[size]; /* also clobbers ov_magic */
|
||||
nextf[size] = op;
|
||||
#ifdef MSTATS
|
||||
nmalloc[size]--;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* When a program attempts "storage compaction" as mentioned in the
|
||||
* old malloc man page, it realloc's an already freed block. Usually
|
||||
* this is the last block it freed; occasionally it might be farther
|
||||
* back. We have to search all the free lists for the block in order
|
||||
* to determine its bucket: 1st we make one pass thru the lists
|
||||
* checking only the first block in each; if that fails we search
|
||||
* ``realloc_srchlen'' blocks in each list for a match (the variable
|
||||
* is extern so the caller can modify it). If that fails we just copy
|
||||
* however many bytes was given to realloc() and hope it's not huge.
|
||||
*/
|
||||
int realloc_srchlen = 4; /* 4 should be plenty, -1 =>'s whole list */
|
||||
|
||||
void *
|
||||
realloc(cp, nbytes)
|
||||
void *cp;
|
||||
size_t nbytes;
|
||||
{
|
||||
register u_long onb;
|
||||
register long i;
|
||||
union overhead *op;
|
||||
char *res;
|
||||
int was_alloced = 0;
|
||||
|
||||
if (cp == NULL)
|
||||
return (malloc(nbytes));
|
||||
if (nbytes == 0) {
|
||||
free (cp);
|
||||
return NULL;
|
||||
}
|
||||
op = (union overhead *)((caddr_t)cp - sizeof (union overhead));
|
||||
if (op->ov_magic == MAGIC) {
|
||||
was_alloced++;
|
||||
i = op->ov_index;
|
||||
} else {
|
||||
/*
|
||||
* Already free, doing "compaction".
|
||||
*
|
||||
* Search for the old block of memory on the
|
||||
* free list. First, check the most common
|
||||
* case (last element free'd), then (this failing)
|
||||
* the last ``realloc_srchlen'' items free'd.
|
||||
* If all lookups fail, then assume the size of
|
||||
* the memory block being realloc'd is the
|
||||
* largest possible (so that all "nbytes" of new
|
||||
* memory are copied into). Note that this could cause
|
||||
* a memory fault if the old area was tiny, and the moon
|
||||
* is gibbous. However, that is very unlikely.
|
||||
*/
|
||||
if ((i = findbucket(op, 1)) < 0 &&
|
||||
(i = findbucket(op, realloc_srchlen)) < 0)
|
||||
i = NBUCKETS;
|
||||
}
|
||||
onb = 1 << (i + 3);
|
||||
if (onb < pagesz)
|
||||
onb -= sizeof (*op) + RSLOP;
|
||||
else
|
||||
onb += pagesz - sizeof (*op) - RSLOP;
|
||||
/* avoid the copy if same size block */
|
||||
if (was_alloced) {
|
||||
if (i) {
|
||||
i = 1 << (i + 2);
|
||||
if (i < pagesz)
|
||||
i -= sizeof (*op) + RSLOP;
|
||||
else
|
||||
i += pagesz - sizeof (*op) - RSLOP;
|
||||
}
|
||||
if (nbytes <= onb && nbytes > i) {
|
||||
#ifdef RCHECK
|
||||
op->ov_size = (nbytes + RSLOP - 1) & ~(RSLOP - 1);
|
||||
*(u_short *)((caddr_t)(op + 1) + op->ov_size) = RMAGIC;
|
||||
#endif
|
||||
return(cp);
|
||||
} else
|
||||
free(cp);
|
||||
}
|
||||
if ((res = malloc(nbytes)) == NULL)
|
||||
return (NULL);
|
||||
if (cp != res) /* common optimization if "compacting" */
|
||||
bcopy(cp, res, (nbytes < onb) ? nbytes : onb);
|
||||
return (res);
|
||||
}
|
||||
|
||||
/*
|
||||
* Search ``srchlen'' elements of each free list for a block whose
|
||||
* header starts at ``freep''. If srchlen is -1 search the whole list.
|
||||
* Return bucket number, or -1 if not found.
|
||||
*/
|
||||
static int
|
||||
findbucket(freep, srchlen)
|
||||
union overhead *freep;
|
||||
int srchlen;
|
||||
{
|
||||
register union overhead *p;
|
||||
register int i, j;
|
||||
|
||||
for (i = 0; i < NBUCKETS; i++) {
|
||||
j = 0;
|
||||
for (p = nextf[i]; p && j != srchlen; p = p->ov_next) {
|
||||
if (p == freep)
|
||||
return (i);
|
||||
j++;
|
||||
}
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
|
||||
#ifdef MSTATS
|
||||
/*
|
||||
* mstats - print out statistics about malloc
|
||||
*
|
||||
* Prints two lines of numbers, one showing the length of the free list
|
||||
* for each size category, the second showing the number of mallocs -
|
||||
* frees for each size category.
|
||||
*/
|
||||
void
|
||||
mstats(s)
|
||||
char *s;
|
||||
{
|
||||
register int i, j;
|
||||
register union overhead *p;
|
||||
int totfree = 0,
|
||||
totused = 0;
|
||||
|
||||
fprintf(stderr, "Memory allocation statistics %s\nfree:\t", s);
|
||||
for (i = 0; i < NBUCKETS; i++) {
|
||||
for (j = 0, p = nextf[i]; p; p = p->ov_next, j++)
|
||||
;
|
||||
fprintf(stderr, " %d", j);
|
||||
totfree += j * (1 << (i + 3));
|
||||
}
|
||||
fprintf(stderr, "\nused:\t");
|
||||
for (i = 0; i < NBUCKETS; i++) {
|
||||
fprintf(stderr, " %d", nmalloc[i]);
|
||||
totused += nmalloc[i] * (1 << (i + 3));
|
||||
}
|
||||
fprintf(stderr, "\n\tTotal in use: %d, total free: %d\n",
|
||||
totused, totfree);
|
||||
}
|
||||
#endif
|
||||
3
lib/libc/alpha/string/Makefile.inc
Normal file
3
lib/libc/alpha/string/Makefile.inc
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# $Id$
|
||||
|
||||
MDSRCS+= bcopy.S bzero.S ffs.S memcpy.S memmove.S
|
||||
288
lib/libc/alpha/string/bcopy.S
Normal file
288
lib/libc/alpha/string/bcopy.S
Normal file
|
|
@ -0,0 +1,288 @@
|
|||
/* $NetBSD: bcopy.S,v 1.3 1996/10/17 03:08:11 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Trevor Blackwell. Support for use as memcpy() and memmove()
|
||||
* added by Chris Demetriou.
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#if defined(MEMCOPY) || defined(MEMMOVE)
|
||||
#ifdef MEMCOPY
|
||||
#define FUNCTION memcpy
|
||||
#else
|
||||
#define FUNCTION memmove
|
||||
#endif
|
||||
#define SRCREG a1
|
||||
#define DSTREG a0
|
||||
#else /* !(defined(MEMCOPY) || defined(MEMMOVE)) */
|
||||
#define FUNCTION bcopy
|
||||
#define SRCREG a0
|
||||
#define DSTREG a1
|
||||
#endif /* !(defined(MEMCOPY) || defined(MEMMOVE)) */
|
||||
|
||||
#define SIZEREG a2
|
||||
|
||||
/*
|
||||
* Copy bytes.
|
||||
*
|
||||
* void bcopy(char *from, char *to, size_t len);
|
||||
* char *memcpy(void *to, const void *from, size_t len);
|
||||
* char *memmove(void *to, const void *from, size_t len);
|
||||
*
|
||||
* No matter how invoked, the source and destination registers
|
||||
* for calculation. There's no point in copying them to "working"
|
||||
* registers, since the code uses their values "in place," and
|
||||
* copying them would be slower.
|
||||
*/
|
||||
|
||||
LEAF(FUNCTION,3)
|
||||
|
||||
#if defined(MEMCOPY) || defined(MEMMOVE)
|
||||
/* set up return value, while we still can */
|
||||
mov DSTREG,v0
|
||||
#endif
|
||||
|
||||
/* Check for negative length */
|
||||
ble SIZEREG,bcopy_done
|
||||
|
||||
/* Check for overlap */
|
||||
subq DSTREG,SRCREG,t5
|
||||
cmpult t5,SIZEREG,t5
|
||||
bne t5,bcopy_overlap
|
||||
|
||||
/* a3 = end address */
|
||||
addq SRCREG,SIZEREG,a3
|
||||
|
||||
/* Get the first word */
|
||||
ldq_u t2,0(SRCREG)
|
||||
|
||||
/* Do they have the same alignment? */
|
||||
xor SRCREG,DSTREG,t0
|
||||
and t0,7,t0
|
||||
and DSTREG,7,t1
|
||||
bne t0,bcopy_different_alignment
|
||||
|
||||
/* src & dst have same alignment */
|
||||
beq t1,bcopy_all_aligned
|
||||
|
||||
ldq_u t3,0(DSTREG)
|
||||
addq SIZEREG,t1,SIZEREG
|
||||
mskqh t2,SRCREG,t2
|
||||
mskql t3,SRCREG,t3
|
||||
or t2,t3,t2
|
||||
|
||||
/* Dst is 8-byte aligned */
|
||||
|
||||
bcopy_all_aligned:
|
||||
/* If less than 8 bytes,skip loop */
|
||||
subq SIZEREG,1,t0
|
||||
and SIZEREG,7,SIZEREG
|
||||
bic t0,7,t0
|
||||
beq t0,bcopy_samealign_lp_end
|
||||
|
||||
bcopy_samealign_lp:
|
||||
stq_u t2,0(DSTREG)
|
||||
addq DSTREG,8,DSTREG
|
||||
ldq_u t2,8(SRCREG)
|
||||
subq t0,8,t0
|
||||
addq SRCREG,8,SRCREG
|
||||
bne t0,bcopy_samealign_lp
|
||||
|
||||
bcopy_samealign_lp_end:
|
||||
/* If we're done, exit */
|
||||
bne SIZEREG,bcopy_small_left
|
||||
stq_u t2,0(DSTREG)
|
||||
RET
|
||||
|
||||
bcopy_small_left:
|
||||
mskql t2,SIZEREG,t4
|
||||
ldq_u t3,0(DSTREG)
|
||||
mskqh t3,SIZEREG,t3
|
||||
or t4,t3,t4
|
||||
stq_u t4,0(DSTREG)
|
||||
RET
|
||||
|
||||
bcopy_different_alignment:
|
||||
/*
|
||||
* this is the fun part
|
||||
*/
|
||||
addq SRCREG,SIZEREG,a3
|
||||
cmpule SIZEREG,8,t0
|
||||
bne t0,bcopy_da_finish
|
||||
|
||||
beq t1,bcopy_da_noentry
|
||||
|
||||
/* Do the initial partial word */
|
||||
subq zero,DSTREG,t0
|
||||
and t0,7,t0
|
||||
ldq_u t3,7(SRCREG)
|
||||
extql t2,SRCREG,t2
|
||||
extqh t3,SRCREG,t3
|
||||
or t2,t3,t5
|
||||
insql t5,DSTREG,t5
|
||||
ldq_u t6,0(DSTREG)
|
||||
mskql t6,DSTREG,t6
|
||||
or t5,t6,t5
|
||||
stq_u t5,0(DSTREG)
|
||||
addq SRCREG,t0,SRCREG
|
||||
addq DSTREG,t0,DSTREG
|
||||
subq SIZEREG,t0,SIZEREG
|
||||
ldq_u t2,0(SRCREG)
|
||||
|
||||
bcopy_da_noentry:
|
||||
subq SIZEREG,1,t0
|
||||
bic t0,7,t0
|
||||
and SIZEREG,7,SIZEREG
|
||||
beq t0,bcopy_da_finish2
|
||||
|
||||
bcopy_da_lp:
|
||||
ldq_u t3,7(SRCREG)
|
||||
addq SRCREG,8,SRCREG
|
||||
extql t2,SRCREG,t4
|
||||
extqh t3,SRCREG,t5
|
||||
subq t0,8,t0
|
||||
or t4,t5,t5
|
||||
stq t5,0(DSTREG)
|
||||
addq DSTREG,8,DSTREG
|
||||
beq t0,bcopy_da_finish1
|
||||
ldq_u t2,7(SRCREG)
|
||||
addq SRCREG,8,SRCREG
|
||||
extql t3,SRCREG,t4
|
||||
extqh t2,SRCREG,t5
|
||||
subq t0,8,t0
|
||||
or t4,t5,t5
|
||||
stq t5,0(DSTREG)
|
||||
addq DSTREG,8,DSTREG
|
||||
bne t0,bcopy_da_lp
|
||||
|
||||
bcopy_da_finish2:
|
||||
/* Do the last new word */
|
||||
mov t2,t3
|
||||
|
||||
bcopy_da_finish1:
|
||||
/* Do the last partial word */
|
||||
ldq_u t2,-1(a3)
|
||||
extql t3,SRCREG,t3
|
||||
extqh t2,SRCREG,t2
|
||||
or t2,t3,t2
|
||||
br zero,bcopy_samealign_lp_end
|
||||
|
||||
bcopy_da_finish:
|
||||
/* Do the last word in the next source word */
|
||||
ldq_u t3,-1(a3)
|
||||
extql t2,SRCREG,t2
|
||||
extqh t3,SRCREG,t3
|
||||
or t2,t3,t2
|
||||
insqh t2,DSTREG,t3
|
||||
insql t2,DSTREG,t2
|
||||
lda t4,-1(zero)
|
||||
mskql t4,SIZEREG,t5
|
||||
cmovne t5,t5,t4
|
||||
insqh t4,DSTREG,t5
|
||||
insql t4,DSTREG,t4
|
||||
addq DSTREG,SIZEREG,a4
|
||||
ldq_u t6,0(DSTREG)
|
||||
ldq_u t7,-1(a4)
|
||||
bic t6,t4,t6
|
||||
bic t7,t5,t7
|
||||
and t2,t4,t2
|
||||
and t3,t5,t3
|
||||
or t2,t6,t2
|
||||
or t3,t7,t3
|
||||
stq_u t3,-1(a4)
|
||||
stq_u t2,0(DSTREG)
|
||||
RET
|
||||
|
||||
bcopy_overlap:
|
||||
/*
|
||||
* Basically equivalent to previous case, only backwards.
|
||||
* Not quite as highly optimized
|
||||
*/
|
||||
addq SRCREG,SIZEREG,a3
|
||||
addq DSTREG,SIZEREG,a4
|
||||
|
||||
/* less than 8 bytes - don't worry about overlap */
|
||||
cmpule SIZEREG,8,t0
|
||||
bne t0,bcopy_ov_short
|
||||
|
||||
/* Possibly do a partial first word */
|
||||
and a4,7,t4
|
||||
beq t4,bcopy_ov_nostart2
|
||||
subq a3,t4,a3
|
||||
subq a4,t4,a4
|
||||
ldq_u t1,0(a3)
|
||||
subq SIZEREG,t4,SIZEREG
|
||||
ldq_u t2,7(a3)
|
||||
ldq t3,0(a4)
|
||||
extql t1,a3,t1
|
||||
extqh t2,a3,t2
|
||||
or t1,t2,t1
|
||||
mskqh t3,t4,t3
|
||||
mskql t1,t4,t1
|
||||
or t1,t3,t1
|
||||
stq t1,0(a4)
|
||||
|
||||
bcopy_ov_nostart2:
|
||||
bic SIZEREG,7,t4
|
||||
and SIZEREG,7,SIZEREG
|
||||
beq t4,bcopy_ov_lp_end
|
||||
|
||||
bcopy_ov_lp:
|
||||
/* This could be more pipelined, but it doesn't seem worth it */
|
||||
ldq_u t0,-8(a3)
|
||||
subq a4,8,a4
|
||||
ldq_u t1,-1(a3)
|
||||
subq a3,8,a3
|
||||
extql t0,a3,t0
|
||||
extqh t1,a3,t1
|
||||
subq t4,8,t4
|
||||
or t0,t1,t0
|
||||
stq t0,0(a4)
|
||||
bne t4,bcopy_ov_lp
|
||||
|
||||
bcopy_ov_lp_end:
|
||||
beq SIZEREG,bcopy_done
|
||||
|
||||
ldq_u t0,0(SRCREG)
|
||||
ldq_u t1,7(SRCREG)
|
||||
ldq_u t2,0(DSTREG)
|
||||
extql t0,SRCREG,t0
|
||||
extqh t1,SRCREG,t1
|
||||
or t0,t1,t0
|
||||
insql t0,DSTREG,t0
|
||||
mskql t2,DSTREG,t2
|
||||
or t2,t0,t2
|
||||
stq_u t2,0(DSTREG)
|
||||
|
||||
bcopy_done:
|
||||
RET
|
||||
|
||||
bcopy_ov_short:
|
||||
ldq_u t2,0(SRCREG)
|
||||
br zero,bcopy_da_finish
|
||||
|
||||
END(FUNCTION)
|
||||
110
lib/libc/alpha/string/bzero.S
Normal file
110
lib/libc/alpha/string/bzero.S
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
/* $NetBSD: bzero.S,v 1.2 1996/10/17 03:08:12 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Trevor Blackwell
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
LEAF(bzero,2)
|
||||
ble a1,bzero_done
|
||||
bic a1,63,t3 /* t3 is # bytes to do 64 bytes at a time */
|
||||
|
||||
/* If nothing in first word, ignore it */
|
||||
subq zero,a0,t0
|
||||
and t0,7,t0 /* t0 = (0-size)%8 */
|
||||
beq t0,bzero_nostart1
|
||||
|
||||
cmpult a1,t0,t1 /* if size > size%8 goto noshort */
|
||||
beq t1,bzero_noshort
|
||||
|
||||
/*
|
||||
* The whole thing is less than a word.
|
||||
* Mask off 1..7 bytes, and finish.
|
||||
*/
|
||||
ldq_u t2,0(a0)
|
||||
lda t0,-1(zero) /* t0=-1 */
|
||||
mskql t0,a1,t0 /* Get ff in bytes (a0%8)..((a0+a1-1)%8) */
|
||||
insql t0,a0,t0
|
||||
bic t2,t0,t2 /* zero those bytes in word */
|
||||
stq_u t2,0(a0)
|
||||
RET
|
||||
|
||||
bzero_noshort:
|
||||
/* Handle the first partial word */
|
||||
ldq_u t2,0(a0)
|
||||
subq a1,t0,a1
|
||||
mskql t2,a0,t2 /* zero bytes (a0%8)..7 in word */
|
||||
stq_u t2,0(a0)
|
||||
|
||||
addq a0,t0,a0 /* round a0 up to next word */
|
||||
bic a1,63,t3 /* recalc t3 (# bytes to do 64 bytes at a
|
||||
time) */
|
||||
|
||||
bzero_nostart1:
|
||||
/*
|
||||
* Loop, zeroing 64 bytes at a time
|
||||
*/
|
||||
beq t3,bzero_lp_done
|
||||
bzero_lp:
|
||||
stq zero,0(a0)
|
||||
stq zero,8(a0)
|
||||
stq zero,16(a0)
|
||||
stq zero,24(a0)
|
||||
subq t3,64,t3
|
||||
stq zero,32(a0)
|
||||
stq zero,40(a0)
|
||||
stq zero,48(a0)
|
||||
stq zero,56(a0)
|
||||
addq a0,64,a0
|
||||
bne t3,bzero_lp
|
||||
|
||||
bzero_lp_done:
|
||||
/*
|
||||
* Handle the last 0..7 words.
|
||||
* We mask off the low bits, so we don't need an extra
|
||||
* compare instruction for the loop (just a bne. heh-heh)
|
||||
*/
|
||||
and a1,0x38,t4
|
||||
beq t4,bzero_finish_lp_done
|
||||
bzero_finish_lp:
|
||||
stq zero,0(a0)
|
||||
subq t4,8,t4
|
||||
addq a0,8,a0
|
||||
bne t4,bzero_finish_lp
|
||||
|
||||
/* Do the last partial word */
|
||||
bzero_finish_lp_done:
|
||||
and a1,7,t5 /* 0..7 bytes left */
|
||||
beq t5,bzero_done /* mskqh won't change t0 if t5==0, but I
|
||||
don't want to touch, say, a new VM page */
|
||||
ldq t0,0(a0)
|
||||
mskqh t0,t5,t0
|
||||
stq t0,0(a0)
|
||||
bzero_done:
|
||||
RET
|
||||
|
||||
END(bzero)
|
||||
91
lib/libc/alpha/string/ffs.S
Normal file
91
lib/libc/alpha/string/ffs.S
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
/* $NetBSD: ffs.S,v 1.3 1996/10/17 03:08:13 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995 Christopher G. Demetriou
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Christopher G. Demetriou
|
||||
* for the NetBSD Project.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
LEAF(ffs, 1)
|
||||
addl a0, 0, t0
|
||||
beq t0, Lallzero
|
||||
|
||||
/*
|
||||
* Initialize return value (v0), and set up t1 so that it
|
||||
* contains the mask with only the lowest bit set.
|
||||
*/
|
||||
subl zero, t0, t1
|
||||
ldil v0, 1
|
||||
and t0, t1, t1
|
||||
|
||||
and t1, 0xff, t2
|
||||
bne t2, Ldo8
|
||||
|
||||
/*
|
||||
* If lower 16 bits empty, add 16 to result and use upper 16.
|
||||
*/
|
||||
zapnot t1, 0x03, t3
|
||||
bne t3, Ldo16
|
||||
sra t1, 16, t1
|
||||
addl v0, 16, v0
|
||||
|
||||
Ldo16:
|
||||
/*
|
||||
* If lower 8 bits empty, add 8 to result and use upper 8.
|
||||
*/
|
||||
and t1, 0xff, t4
|
||||
bne t4, Ldo8
|
||||
sra t1, 8, t1
|
||||
addl v0, 8, v0
|
||||
|
||||
Ldo8:
|
||||
and t1, 0x0f, t5 /* lower 4 of 8 empty? */
|
||||
and t1, 0x33, t6 /* lower 2 of each 4 empty? */
|
||||
and t1, 0x55, t7 /* lower 1 of each 2 empty? */
|
||||
|
||||
/* If lower 4 bits empty, add 4 to result. */
|
||||
bne t5, Ldo4
|
||||
addl v0, 4, v0
|
||||
|
||||
Ldo4: /* If lower 2 bits of each 4 empty, add 2 to result. */
|
||||
bne t6, Ldo2
|
||||
addl v0, 2, v0
|
||||
|
||||
Ldo2: /* If lower bit of each 2 empty, add 1 to result. */
|
||||
bne t7, Ldone
|
||||
addl v0, 1, v0
|
||||
|
||||
Ldone:
|
||||
RET
|
||||
|
||||
Lallzero:
|
||||
bis zero, zero, v0
|
||||
RET
|
||||
END(ffs)
|
||||
4
lib/libc/alpha/string/memcpy.S
Normal file
4
lib/libc/alpha/string/memcpy.S
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
/* $NetBSD: memcpy.S,v 1.1 1995/08/13 00:40:47 cgd Exp $ */
|
||||
|
||||
#define MEMCOPY
|
||||
#include "bcopy.S"
|
||||
4
lib/libc/alpha/string/memmove.S
Normal file
4
lib/libc/alpha/string/memmove.S
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
/* $NetBSD: memmove.S,v 1.1 1995/08/13 00:40:48 cgd Exp $ */
|
||||
|
||||
#define MEMMOVE
|
||||
#include "bcopy.S"
|
||||
13
lib/libc/alpha/sys/Makefile.inc
Normal file
13
lib/libc/alpha/sys/Makefile.inc
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
# $Id$
|
||||
|
||||
MDASM+= Ovfork.S brk.S cerror.S exect.S fork.S pipe.S ptrace.S \
|
||||
sbrk.S setlogin.S sigpending.S sigprocmask.S sigreturn.S \
|
||||
sigsuspend.S syscall.S
|
||||
|
||||
# Don't generate default code for these syscalls:
|
||||
NOASM= break.o exit.o ftruncate.o lseek.o mmap.o posix_rename.o sstk.o \
|
||||
truncate.o vfork.o vtrace.o
|
||||
|
||||
# Pseudo syscalls that are renamed as _thread_sys_{pseudo} when
|
||||
# building libc_r.
|
||||
PSEUDOR= _exit.o
|
||||
35
lib/libc/alpha/sys/Ovfork.S
Normal file
35
lib/libc/alpha/sys/Ovfork.S
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
/* $NetBSD: Ovfork.S,v 1.1 1995/02/10 17:50:29 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include "SYS.h"
|
||||
|
||||
SYSCALL(vfork)
|
||||
cmovne a4, zero, v0 /* a4 (rv[1]) != 0, child */
|
||||
RET
|
||||
END(vfork)
|
||||
50
lib/libc/alpha/sys/brk.S
Normal file
50
lib/libc/alpha/sys/brk.S
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
/* $NetBSD: brk.S,v 1.4 1996/10/17 03:08:15 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include "SYS.h"
|
||||
|
||||
.globl _end
|
||||
IMPORT(curbrk, 8)
|
||||
|
||||
.data
|
||||
EXPORT(minbrk)
|
||||
.quad _end
|
||||
|
||||
.text
|
||||
LEAF(brk, 1)
|
||||
br pv, L1 /* XXX profiling */
|
||||
L1: LDGP(pv)
|
||||
ldq v0, minbrk
|
||||
cmpult a0, v0, t0
|
||||
cmovne t0, v0, a0
|
||||
CALLSYS_ERROR(break)
|
||||
stq a0, curbrk
|
||||
mov zero, v0
|
||||
RET
|
||||
END(brk)
|
||||
65
lib/libc/alpha/sys/cerror.S
Normal file
65
lib/libc/alpha/sys/cerror.S
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
/* $NetBSD: cerror.S,v 1.4 1996/11/08 00:52:46 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include "SYS.h"
|
||||
|
||||
#ifdef _REENTRANT
|
||||
#define FRAME_SIZE 16
|
||||
#define FRAME_RA_OFFSET 0
|
||||
#define FRAME_V0_OFFSET 8
|
||||
#endif
|
||||
|
||||
#ifdef _REENTRANT
|
||||
NESTED(cerror, 0, FRAME_SIZE, ra, IM_RA|IM_V0, 0)
|
||||
#else
|
||||
LEAF(cerror, 0)
|
||||
#endif
|
||||
br t0, L1
|
||||
L1: LDGP(t0)
|
||||
|
||||
#ifdef _REENTRANT
|
||||
lda sp, -FRAME_SIZE(sp)
|
||||
stq ra, FRAME_RA_OFFSET(sp)
|
||||
stq v0, FRAME_V0_OFFSET(sp)
|
||||
|
||||
CALL(__error)
|
||||
|
||||
ldq t0, FRAME_V0_OFFSET(sp)
|
||||
stl t0, 0(v0)
|
||||
#else
|
||||
stl v0, errno
|
||||
#endif
|
||||
|
||||
ldiq v0, -1
|
||||
#ifdef _REENTRANT
|
||||
ldq ra, FRAME_RA_OFFSET(sp)
|
||||
lda sp, FRAME_SIZE(sp)
|
||||
#endif
|
||||
RET
|
||||
END(cerror)
|
||||
35
lib/libc/alpha/sys/exect.S
Normal file
35
lib/libc/alpha/sys/exect.S
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
/* $NetBSD: exect.S,v 1.2 1996/10/17 03:08:18 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include "SYS.h"
|
||||
|
||||
LEAF(exect, 3)
|
||||
CALLSYS_ERROR(execve)
|
||||
RET
|
||||
END(exect)
|
||||
35
lib/libc/alpha/sys/fork.S
Normal file
35
lib/libc/alpha/sys/fork.S
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
/* $NetBSD: fork.S,v 1.1 1995/02/10 17:50:34 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include "SYS.h"
|
||||
|
||||
SYSCALL(fork)
|
||||
cmovne a4, zero, v0 /* a4 (rv[1]) != 0, child */
|
||||
RET
|
||||
END(fork)
|
||||
37
lib/libc/alpha/sys/pipe.S
Normal file
37
lib/libc/alpha/sys/pipe.S
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
/* $NetBSD: pipe.S,v 1.1 1995/02/10 17:50:35 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include "SYS.h"
|
||||
|
||||
SYSCALL(pipe)
|
||||
stl v0, 0(a0)
|
||||
stl a4, 4(a0)
|
||||
mov zero, v0
|
||||
RET
|
||||
END(pipe)
|
||||
37
lib/libc/alpha/sys/ptrace.S
Normal file
37
lib/libc/alpha/sys/ptrace.S
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
/* $NetBSD: ptrace.S,v 1.4 1996/11/08 00:51:24 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include "SYS.h"
|
||||
|
||||
LEAF(ptrace, 4)
|
||||
LDGP(pv)
|
||||
stl zero, errno
|
||||
CALLSYS_ERROR(ptrace)
|
||||
RET
|
||||
END(ptrace)
|
||||
48
lib/libc/alpha/sys/sbrk.S
Normal file
48
lib/libc/alpha/sys/sbrk.S
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
/* $NetBSD: sbrk.S,v 1.4 1996/10/17 03:08:20 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include "SYS.h"
|
||||
|
||||
.globl _end
|
||||
|
||||
.data
|
||||
EXPORT(curbrk)
|
||||
.quad _end
|
||||
|
||||
.text
|
||||
LEAF(sbrk, 1)
|
||||
br pv, L1 /* XXX profiling */
|
||||
L1: LDGP(pv)
|
||||
ldq a1, curbrk
|
||||
addq a0, a1, a0
|
||||
CALLSYS_ERROR(break)
|
||||
stq a0, curbrk
|
||||
mov a1, v0
|
||||
RET
|
||||
END(sbrk)
|
||||
37
lib/libc/alpha/sys/setlogin.S
Normal file
37
lib/libc/alpha/sys/setlogin.S
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
/* $NetBSD: setlogin.S,v 1.1 1995/02/10 17:50:39 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include "SYS.h"
|
||||
|
||||
IMPORT(_logname_valid, 4) /* in getlogin() */
|
||||
|
||||
SYSCALL(setlogin)
|
||||
stl zero, _logname_valid /* clear it */
|
||||
RET
|
||||
END(setlogin)
|
||||
36
lib/libc/alpha/sys/sigpending.S
Normal file
36
lib/libc/alpha/sys/sigpending.S
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
/* $NetBSD: sigpending.S,v 1.1 1995/02/10 17:50:40 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include "SYS.h"
|
||||
|
||||
SYSCALL(sigpending)
|
||||
stl v0, 0(a0)
|
||||
mov zero, v0
|
||||
RET
|
||||
END(sigpending)
|
||||
44
lib/libc/alpha/sys/sigprocmask.S
Normal file
44
lib/libc/alpha/sys/sigprocmask.S
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
/* $NetBSD: sigprocmask.S,v 1.2 1996/10/17 03:08:21 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include "SYS.h"
|
||||
|
||||
LEAF(sigprocmask, 3)
|
||||
mov a2, a5 /* safe */
|
||||
cmoveq a1, 1, a0 /* if set == NULL, how = SIG_BLOCK */
|
||||
beq a1, Ldoit /* and set = 0, and do it. */
|
||||
ldl a1, 0(a1) /* load the set from *set */
|
||||
Ldoit: CALLSYS_ERROR(sigprocmask)
|
||||
beq a5, Lret /* if they don't want old mask, done */
|
||||
stl v0, 0(a5) /* otherwise, give it to them. */
|
||||
Lret: mov zero, v0
|
||||
RET
|
||||
|
||||
END(sigprocmask)
|
||||
|
||||
38
lib/libc/alpha/sys/sigreturn.S
Normal file
38
lib/libc/alpha/sys/sigreturn.S
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
/* $NetBSD: sigreturn.S,v 1.1 1995/02/10 17:50:42 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include "SYS.h"
|
||||
|
||||
/*
|
||||
* We must preserve the state of the registers as the user has set them up.
|
||||
* However, that doesn't involve any special work on the Alpha.
|
||||
* (XXX PROFILING)
|
||||
*/
|
||||
|
||||
RSYSCALL(sigreturn)
|
||||
37
lib/libc/alpha/sys/sigsuspend.S
Normal file
37
lib/libc/alpha/sys/sigsuspend.S
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
/* $NetBSD: sigsuspend.S,v 1.2 1996/10/17 03:08:22 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include "SYS.h"
|
||||
|
||||
LEAF(sigsuspend, 1)
|
||||
ldl a0, 0(a0) /* pass *mask instead of mask */
|
||||
CALLSYS_ERROR(sigsuspend)
|
||||
mov zero, v0 /* shouldn't need; just in case... */
|
||||
RET
|
||||
END(sigsuspend)
|
||||
32
lib/libc/alpha/sys/syscall.S
Normal file
32
lib/libc/alpha/sys/syscall.S
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
/* $NetBSD: syscall.S,v 1.1 1995/02/10 17:50:44 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#include "SYS.h"
|
||||
|
||||
RSYSCALL(syscall)
|
||||
Loading…
Reference in a new issue