diff options
Diffstat (limited to 'lib/libc/alpha')
49 files changed, 2954 insertions, 0 deletions
diff --git a/lib/libc/alpha/Makefile.inc b/lib/libc/alpha/Makefile.inc new file mode 100644 index 0000000..49f6a3e --- /dev/null +++ b/lib/libc/alpha/Makefile.inc @@ -0,0 +1,8 @@ +# $FreeBSD$ +# +# Machine dependent definitions for the alpha architecture. +# + +# On Alpha, long double is just double precision. +MDSRCS+=machdep_ldisd.c +SYM_MAPS+=${.CURDIR}/alpha/Symbol.map diff --git a/lib/libc/alpha/SYS.h b/lib/libc/alpha/SYS.h new file mode 100644 index 0000000..5365e67 --- /dev/null +++ b/lib/libc/alpha/SYS.h @@ -0,0 +1,74 @@ +/* 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. + * + * $FreeBSD$ + */ + +#include <machine/asm.h> +#include <sys/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(__CONCAT(__sys_,name),0); /* XXX # of args? */ \ + WEAK_ALIAS(name, __CONCAT(__sys_,name)); \ + WEAK_ALIAS(__CONCAT(_,name), __CONCAT(__sys_,name)); \ + CALLSYS_ERROR(name) + +#define SYSCALL_NOERROR(name) \ +LEAF(__CONCAT(__sys_,name),0); /* XXX # of args? */ \ + WEAK_ALIAS(name, __CONCAT(__sys_,name)); \ + WEAK_ALIAS(__CONCAT(_,name), __CONCAT(__sys_,name)); \ + CALLSYS_NOERROR(name) + + +#define RSYSCALL(name) \ + SYSCALL(name); \ + RET; \ +END(__CONCAT(__sys_,name)) + +#define RSYSCALL_NOERROR(name) \ + SYSCALL_NOERROR(name); \ + RET; \ +END(__CONCAT(__sys_,name)) + + +#define PSEUDO(name) \ +LEAF(__CONCAT(__sys_,name),0); /* XXX # of args? */ \ + WEAK_ALIAS(__CONCAT(_,name), __CONCAT(__sys_, name)); \ + CALLSYS_ERROR(name); \ + RET; \ +END(__CONCAT(__sys_,name)) diff --git a/lib/libc/alpha/Symbol.map b/lib/libc/alpha/Symbol.map new file mode 100644 index 0000000..51c81ed --- /dev/null +++ b/lib/libc/alpha/Symbol.map @@ -0,0 +1,77 @@ +# $FreeBSD$ + +# +# This only needs to contain symbols that are not listed in +# symbol maps from other parts of libc (i.e., not found in +# stdlib/Symbol.map, string/Symbol.map, sys/Symbol.map, ...). +# +FBSD_1.0 { + # PSEUDO syscalls + _exit; + + __flt_rounds; + fpgetmask; + fpgetround; + fpgetsticky; + fpsetmask; + fpsetround; + __infinity; + __nan; + makecontext; + modf; + _setjmp; + _longjmp; + fabs; + rfork_thread; + setjmp; + longjmp; + sigsetjmp; + siglongjmp; + __htonl; + htonl; + __htons; + htons; + __ntohl; + ntohl; + __ntohs; + ntohs; + vfork; + exect; + fork; + sbrk; +}; + +# +# FreeBSD private ABI +# +FBSDprivate { + # PSEUDO syscalls + __sys_getlogin; + _getlogin; + __sys_exit; + + _set_tp; + __makecontext; + __signalcontext; + signalcontext; + ___longjmp; + __longjmp; + __siglongjmp; + __divqu; + __divq; + __divlu; + __divl; + __remqu; + __remq; + __remlu; + __reml; + __sys_vork; + _vfork; + __sys_fork; + _fork; + _end; + curbrk; + minbrk; + brk; + .cerror; +}; diff --git a/lib/libc/alpha/_fpmath.h b/lib/libc/alpha/_fpmath.h new file mode 100644 index 0000000..8b6d09e --- /dev/null +++ b/lib/libc/alpha/_fpmath.h @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 2002, 2003 David Schultz <das@FreeBSD.ORG> + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $FreeBSD$ + */ + +union IEEEl2bits { + long double e; + struct { + unsigned int manl :32; + unsigned int manh :20; + unsigned int exp :11; + unsigned int sign :1; + } bits; +}; + +#define mask_nbit_l(u) ((void)0) +#define LDBL_IMPLICIT_NBIT +#define LDBL_NBIT 0 + +#define LDBL_MANH_SIZE 20 +#define LDBL_MANL_SIZE 32 + +#define LDBL_TO_ARRAY32(u, a) do { \ + (a)[0] = (uint32_t)(u).bits.manl; \ + (a)[1] = (uint32_t)(u).bits.manh; \ +} while(0) diff --git a/lib/libc/alpha/arith.h b/lib/libc/alpha/arith.h new file mode 100644 index 0000000..c8af6de --- /dev/null +++ b/lib/libc/alpha/arith.h @@ -0,0 +1,20 @@ +/* + * MD header for contrib/netlib/gdtoa + * + * $FreeBSD$ + */ + +/* + * NOTE: The definitions in this file must be correct or strtod(3) and + * floating point formats in printf(3) will break! The file can be + * generated by running contrib/gdtoa/arithchk.c on the target + * architecture. See contrib/gdtoa/gdtoaimp.h for details. + */ + +#define IEEE_8087 +#define Arith_Kind_ASL 1 +#define Long int +#define Intcast (int)(long) +#define Double_Align +#define X64_bit_pointers +#define Sudden_Underflow diff --git a/lib/libc/alpha/gen/Makefile.inc b/lib/libc/alpha/gen/Makefile.inc new file mode 100644 index 0000000..8f8caf8 --- /dev/null +++ b/lib/libc/alpha/gen/Makefile.inc @@ -0,0 +1,47 @@ +# $FreeBSD$ + +SRCS+= _setjmp.S _set_tp.c fabs.S infinity.c ldexp.c modf.c setjmp.S +SRCS+= flt_rounds.c fpgetmask.c fpgetround.c fpgetsticky.c fpsetmask.c \ + fpsetround.c + +SRCS+= sigsetjmp.S +SRCS+= __divqu.S __divq.S __divlu.S __divl.S +SRCS+= __remqu.S __remq.S __remlu.S __reml.S +SRCS+= rfork_thread.S +SRCS+= _ctx_start.S makecontext.c signalcontext.c + +CLEANFILES+= __divqu.S __divq.S __divlu.S __divl.S +CLEANFILES+= __remqu.S __remq.S __remlu.S __reml.S + + +__divqu.S: ${.CURDIR}/alpha/gen/divrem.m4 + m4 -DNAME=__divqu -DOP=div -DS=false -DWORDSIZE=64 \ + ${.ALLSRC} > ${.TARGET} + +__divq.S: ${.CURDIR}/alpha/gen/divrem.m4 + m4 -DNAME=__divq -DOP=div -DS=true -DWORDSIZE=64 \ + ${.ALLSRC} > ${.TARGET} + +__divlu.S: ${.CURDIR}/alpha/gen/divrem.m4 + m4 -DNAME=__divlu -DOP=div -DS=false -DWORDSIZE=32 \ + ${.ALLSRC} > ${.TARGET} + +__divl.S: ${.CURDIR}/alpha/gen/divrem.m4 + m4 -DNAME=__divl -DOP=div -DS=true -DWORDSIZE=32 \ + ${.ALLSRC} > ${.TARGET} + +__remqu.S: ${.CURDIR}/alpha/gen/divrem.m4 + m4 -DNAME=__remqu -DOP=rem -DS=false -DWORDSIZE=64 \ + ${.ALLSRC} > ${.TARGET} + +__remq.S: ${.CURDIR}/alpha/gen/divrem.m4 + m4 -DNAME=__remq -DOP=rem -DS=true -DWORDSIZE=64 \ + ${.ALLSRC} > ${.TARGET} + +__remlu.S: ${.CURDIR}/alpha/gen/divrem.m4 + m4 -DNAME=__remlu -DOP=rem -DS=false -DWORDSIZE=32 \ + ${.ALLSRC} > ${.TARGET} + +__reml.S: ${.CURDIR}/alpha/gen/divrem.m4 + m4 -DNAME=__reml -DOP=rem -DS=true -DWORDSIZE=32 \ + ${.ALLSRC} > ${.TARGET} diff --git a/lib/libc/alpha/gen/_ctx_start.S b/lib/libc/alpha/gen/_ctx_start.S new file mode 100644 index 0000000..229a6c1 --- /dev/null +++ b/lib/libc/alpha/gen/_ctx_start.S @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2001 Daniel Eischen <deischen@freebsd.org> + * 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. Neither the name of the author 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 AUTHOR 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 AUTHOR 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 <machine/asm.h> +__FBSDID("$FreeBSD$"); + +/* + * A0-A5 are the first 6 arguments to the start routine with the + * remaining arguments (if any) placed on the stack. S0 is the + * address of the user-supplied start routine, and S1 is the pointer + * to the ucontext. + */ + .set noreorder +LEAF(_ctx_start,0) + mov s0, t12 + jsr ra, (s0) /* call start routine; args already set */ + LDGP(ra) + mov s1, a0 /* load A0 (arg 1) with pointer to ucontext */ + CALL(_ctx_done) /* call context completion routine */ + CALL(abort) /* should never return from above call */ + RET +END(_ctx_start) diff --git a/lib/libc/alpha/gen/_set_tp.c b/lib/libc/alpha/gen/_set_tp.c new file mode 100644 index 0000000..7aff9f7 --- /dev/null +++ b/lib/libc/alpha/gen/_set_tp.c @@ -0,0 +1,40 @@ +/*- + * Copyright (c) 2004 Doug Rabson + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $FreeBSD$ + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/types.h> +#include <machine/alpha_cpu.h> + +void +_set_tp(void *tp) +{ + + alpha_pal_wrunique((uintptr_t) tp); +} diff --git a/lib/libc/alpha/gen/_setjmp.S b/lib/libc/alpha/gen/_setjmp.S new file mode 100644 index 0000000..85ed8c7 --- /dev/null +++ b/lib/libc/alpha/gen/_setjmp.S @@ -0,0 +1,127 @@ +/* $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> +__FBSDID("$FreeBSD$"); + +/* + * 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 t12,((27 + 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) + +XLEAF(_longjmp, 2) +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 t12,((27 + 4) * 8)(a0) + 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) diff --git a/lib/libc/alpha/gen/divrem.m4 b/lib/libc/alpha/gen/divrem.m4 new file mode 100644 index 0000000..6afa2e1 --- /dev/null +++ b/lib/libc/alpha/gen/divrem.m4 @@ -0,0 +1,198 @@ +/* $NetBSD: divrem.m4,v 1.7 1996/10/17 03:08:04 cgd Exp $ */ +/* $FreeBSD$ */ + +/* + * 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> + +NESTED(NAME, 0, 0, t9, 0, 0) /* Get the right ra */ + 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. */ + subq 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) diff --git a/lib/libc/alpha/gen/fabs.S b/lib/libc/alpha/gen/fabs.S new file mode 100644 index 0000000..5a742fe --- /dev/null +++ b/lib/libc/alpha/gen/fabs.S @@ -0,0 +1,36 @@ +/* $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> +__FBSDID("$FreeBSD$"); + +LEAF(fabs, 1) + cpys fzero, fa0, fv0 + RET +END(fabs) diff --git a/lib/libc/alpha/gen/flt_rounds.c b/lib/libc/alpha/gen/flt_rounds.c new file mode 100644 index 0000000..c3219d9 --- /dev/null +++ b/lib/libc/alpha/gen/flt_rounds.c @@ -0,0 +1,60 @@ +/* + * 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. + * + * $NetBSD: flt_rounds.c,v 1.2 1997/07/18 00:30:30 thorpej Exp $ + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#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() +{ + union { + double fpcrval; + u_int64_t intval; + } u; + + __asm__("trapb"); + __asm__("mf_fpcr %0" : "=f" (u.fpcrval)); + __asm__("trapb"); + + return map[(u.intval >> 58) & 0x3]; +} diff --git a/lib/libc/alpha/gen/fpgetmask.c b/lib/libc/alpha/gen/fpgetmask.c new file mode 100644 index 0000000..036a150 --- /dev/null +++ b/lib/libc/alpha/gen/fpgetmask.c @@ -0,0 +1,52 @@ +/* + * 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. + * + * $NetBSD: fpgetmask.c,v 1.1 1995/04/29 05:10:55 cgd Exp $ + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/types.h> +#include <ieeefp.h> +#include <machine/sysarch.h> + +struct params { + u_int64_t mask; +}; + +fp_except_t +fpgetmask() +{ + struct params p; + + sysarch(ALPHA_GET_FPMASK, &p); + return((fp_except_t) p.mask); +} diff --git a/lib/libc/alpha/gen/fpgetround.c b/lib/libc/alpha/gen/fpgetround.c new file mode 100644 index 0000000..1fd96b2 --- /dev/null +++ b/lib/libc/alpha/gen/fpgetround.c @@ -0,0 +1,52 @@ +/* + * 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. + * + * $NetBSD: fpgetround.c,v 1.1 1995/04/29 05:09:55 cgd Exp $ + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/types.h> +#include <ieeefp.h> +#include <machine/fpu.h> + +fp_rnd_t +fpgetround() +{ + union { + double fpcrval; + u_int64_t intval; + } u; + + GET_FPCR(u.fpcrval); + + return ((u.intval & FPCR_DYN_MASK) >> FPCR_DYN_SHIFT); +} diff --git a/lib/libc/alpha/gen/fpgetsticky.c b/lib/libc/alpha/gen/fpgetsticky.c new file mode 100644 index 0000000..7586eb4 --- /dev/null +++ b/lib/libc/alpha/gen/fpgetsticky.c @@ -0,0 +1,52 @@ +/* + * 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. + * + * $NetBSD: fpgetsticky.c,v 1.1 1995/04/29 05:10:59 cgd Exp $ + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/types.h> +#include <ieeefp.h> +#include <machine/fpu.h> + +fp_except_t +fpgetsticky() +{ + union { + double fpcrval; + u_int64_t intval; + } u; + + GET_FPCR(u.fpcrval); + return (((u.intval >> IEEE_STATUS_TO_FPCR_SHIFT) & IEEE_STATUS_MASK) + >> IEEE_STATUS_TO_EXCSUM_SHIFT); +} diff --git a/lib/libc/alpha/gen/fpsetmask.c b/lib/libc/alpha/gen/fpsetmask.c new file mode 100644 index 0000000..65da3c5 --- /dev/null +++ b/lib/libc/alpha/gen/fpsetmask.c @@ -0,0 +1,54 @@ +/* + * 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. + * + * $NetBSD: fpsetmask.c,v 1.1 1995/04/29 05:11:01 cgd Exp $ + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/types.h> +#include <ieeefp.h> +#include <machine/sysarch.h> + +struct params { + u_int64_t mask; +}; + +fp_except_t +fpsetmask(mask) + fp_except_t mask; +{ + struct params p; + + p.mask = (u_int64_t) mask; + sysarch(ALPHA_SET_FPMASK, &p); + return ((fp_except_t) p.mask); +} diff --git a/lib/libc/alpha/gen/fpsetround.c b/lib/libc/alpha/gen/fpsetround.c new file mode 100644 index 0000000..8e994c7 --- /dev/null +++ b/lib/libc/alpha/gen/fpsetround.c @@ -0,0 +1,61 @@ +/* + * 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. + * + * $NetBSD: fpsetround.c,v 1.1 1995/04/29 05:09:57 cgd Exp $ + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/types.h> +#include <ieeefp.h> +#include <machine/fpu.h> + +fp_rnd_t +fpsetround(rnd_dir) + fp_rnd_t rnd_dir; +{ + union { + double fpcrval; + u_int64_t intval; + } u; + u_int64_t old, new; + + GET_FPCR(u.fpcrval); + + old = u.intval; + new = old & (~FPCR_DYN_MASK); + new |= ((long) rnd_dir << FPCR_DYN_SHIFT) & FPCR_DYN_MASK; + + u.intval = new; + SET_FPCR(u.fpcrval); + + return ((old & FPCR_DYN_MASK) >> FPCR_DYN_SHIFT); +} diff --git a/lib/libc/alpha/gen/infinity.c b/lib/libc/alpha/gen/infinity.c new file mode 100644 index 0000000..b10f6d3 --- /dev/null +++ b/lib/libc/alpha/gen/infinity.c @@ -0,0 +1,39 @@ +/* + * 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. + * + * $NetBSD: infinity.c,v 1.1 1995/02/10 17:50:23 cgd Exp $ + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <math.h> + +/* bytes for +Infinity on an Alpha (IEEE double format) */ +const union __infinity_un __infinity = { { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f } }; + +/* bytes for NaN */ +const union __nan_un __nan = { { 0, 0, 0xc0, 0xff } }; diff --git a/lib/libc/alpha/gen/makecontext.c b/lib/libc/alpha/gen/makecontext.c new file mode 100644 index 0000000..bc8ea03 --- /dev/null +++ b/lib/libc/alpha/gen/makecontext.c @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2001 Daniel M. Eischen <deischen@freebsd.org> + * 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. Neither the name of the author 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 AUTHOR 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 AUTHOR 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> +__FBSDID("$FreeBSD$"); + +#include <sys/param.h> +#include <sys/signal.h> + +#include <errno.h> +#include <stdarg.h> +#include <stdlib.h> +#include <ucontext.h> +#include <unistd.h> + + +/* Prototypes */ +extern void _ctx_start(int argc, ...); + + +__weak_reference(__makecontext, makecontext); + +void +_ctx_done (ucontext_t *ucp) +{ + if (ucp->uc_link == NULL) + exit(0); + else { + /* + * Since this context has finished, don't allow it + * to be restarted without being reinitialized (via + * setcontext or swapcontext). + */ + ucp->uc_mcontext.mc_format = 0; + + /* Set context to next one in link */ + /* XXX - what to do for error, abort? */ + setcontext((const ucontext_t *)ucp->uc_link); + abort(); /* should never get here */ + } +} + +void +__makecontext(ucontext_t *ucp, void (*start)(void), int argc, ...) +{ + va_list ap; + char *stack_top; + intptr_t *argp; + int i; + + if (ucp == NULL) + return; + else if ((ucp->uc_stack.ss_sp == NULL) || + (ucp->uc_stack.ss_size < MINSIGSTKSZ)) { + /* + * This should really return -1 with errno set to ENOMEM + * or something, but the spec says that makecontext is + * a void function. At least make sure that the context + * isn't valid so it can't be used without an error. + */ + ucp->uc_mcontext.mc_format = 0; + } + /* XXX - Do we want to sanity check argc? */ + else if ((argc < 0) || (argc > NCARGS)) { + ucp->uc_mcontext.mc_format = 0; + } + /* + * Make sure the context is valid. For now, we only allow + * trapframe format contexts to be used for makecontext. + */ + else if (ucp->uc_mcontext.mc_format == _MC_REV0_TRAPFRAME) { + /* + * Alpha passes the first 6 parameters in registers and + * remaining parameters on the stack. Set up the context + * accordingly, with the user start routine in register + * S0, and the context start wrapper (_ctx_start) in the + * program counter and return address. The context must + * be in trapframe format. + * + * Note: The context start wrapper needs to retrieve the + * ucontext pointer. Place this in register S1 + * which must be saved by the callee. + */ + stack_top = (char *)(ucp->uc_stack.ss_sp + + ucp->uc_stack.ss_size - sizeof(double)); + stack_top = (char *)ALIGN(stack_top); + + /* + * Adjust top of stack to allow for any additional integer + * arguments beyond 6. + */ + if (argc > 6) + stack_top = stack_top - (sizeof(intptr_t) * (argc - 6)); + + argp = (intptr_t *)stack_top; + + va_start(ap, argc); + for (i = 0; i < argc; i++) { + switch (i) { + case 0: ucp->uc_mcontext.mc_regs[FRAME_A0] = + (unsigned long)va_arg(ap, intptr_t); + break; + + case 1: ucp->uc_mcontext.mc_regs[FRAME_A1] = + (unsigned long)va_arg(ap, intptr_t); + break; + + case 2: ucp->uc_mcontext.mc_regs[FRAME_A2] = + (unsigned long)va_arg(ap, intptr_t); + break; + + case 3: ucp->uc_mcontext.mc_regs[FRAME_A3] = + (unsigned long)va_arg(ap, intptr_t); + break; + + case 4: ucp->uc_mcontext.mc_regs[FRAME_A4] = + (unsigned long)va_arg(ap, intptr_t); + break; + + case 5: ucp->uc_mcontext.mc_regs[FRAME_A5] = + (unsigned long)va_arg(ap, intptr_t); + break; + + default: + *argp = va_arg(ap, intptr_t); + argp++; + break; + } + } + va_end(ap); + + /* + * The start routine and ucontext are placed in registers + * S0 and S1 respectively. + */ + ucp->uc_mcontext.mc_regs[FRAME_S0] = (unsigned long)start; + ucp->uc_mcontext.mc_regs[FRAME_S1] = (unsigned long)ucp; + + /* + * Set the machine context to point to the top of the stack, + * and the program counter and return address to the context + * start wrapper. + */ + ucp->uc_mcontext.mc_regs[FRAME_SP] = (unsigned long)stack_top; + ucp->uc_mcontext.mc_regs[FRAME_PC] = (unsigned long)_ctx_start; + ucp->uc_mcontext.mc_regs[FRAME_RA] = (unsigned long)_ctx_start; + ucp->uc_mcontext.mc_regs[FRAME_T12] = (unsigned long)_ctx_start; + } +} diff --git a/lib/libc/alpha/gen/modf.c b/lib/libc/alpha/gen/modf.c new file mode 100644 index 0000000..37786dc --- /dev/null +++ b/lib/libc/alpha/gen/modf.c @@ -0,0 +1,107 @@ +/* + * 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. + * + * $NetBSD: modf.c,v 1.1 1995/02/10 17:50:25 cgd Exp $ + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#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); +} diff --git a/lib/libc/alpha/gen/rfork_thread.S b/lib/libc/alpha/gen/rfork_thread.S new file mode 100644 index 0000000..68b0233 --- /dev/null +++ b/lib/libc/alpha/gen/rfork_thread.S @@ -0,0 +1,66 @@ +/*- + * Copyright (c) 2000 Peter Wemm <peter@FreeBSD.org> + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "SYS.h" +#include <sys/syscall.h> +/* #include <machine/pal.h> */ + +/* + * This is pretty evil and based mostly on examples from other syscall + * stubs and code that gcc generated. Correctness is uncertain, but it + * seems to work quite happily. + */ +LEAF(rfork_thread, 1) + br gp,L1 /* XXX profiling */ +L1: + LDGP(pv) + lda sp,-16(sp) + stq ra,0(sp) + mov a3,a5 + CALLSYS_ERROR(rfork) + beq v0,$child + addl v0,zero,v0 + ldq ra,0(sp) + lda sp,16(sp) + RET +$child: + mov a1,sp + lda sp,-16(sp) + stq zero,0(sp) + mov a5,a0 + mov a2,t12 + jsr ra,(t12),0 + ldgp gp,0(ra) + mov v0,a0 +#ifdef SYS_exit + CALLSYS_NOERROR(exit) +#else + CALLSYS_NOERROR(sys_exit) +#endif +END(rfork_thread) diff --git a/lib/libc/alpha/gen/setjmp.S b/lib/libc/alpha/gen/setjmp.S new file mode 100644 index 0000000..779684d --- /dev/null +++ b/lib/libc/alpha/gen/setjmp.S @@ -0,0 +1,138 @@ +/* $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> +__FBSDID("$FreeBSD$"); + +#include "SYS.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 t12,((27 + 4) * 8)(a0) + stq sp, ((30 + 4) * 8)(a0) + + /* + * get signal information + */ + mov a0, s0 /* squirrel away ptr to sc */ + + /* see what's blocked */ + lda a2, (71 * 8)(a0) /* oset: sc_reserved */ + mov zero, a1 /* set: NULL */ + addq a1, 1, a0 /* how: SIG_BLOCK */ + CALL(_sigprocmask) /* see what's blocked */ + + lda sp, -24(sp) /* sizeof struct sigaltstack */ + mov zero, a0 + mov sp, a1 + CALL(_sigaltstack) + 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, 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) + +XLEAF(longjmp, 2) +LEAF(__longjmp, 2) + LDGP(pv) + mov a1, s1 /* save return value */ + mov a0, s0 /* save the sc pointer */ + /* restore the mask */ + mov zero, a2 /* oset: NULL */ + lda a1, (71 * 8)(a0) /* set: sc_reserved */ + addq a2, 3, a0 /* how: SIG_SET */ + CALL(_sigprocmask) /* restore the mask */ + mov s0, a0 /* restore the sc pointer */ + mov s1, a1 /* restore the return value */ + jmp zero, ___longjmp /* use ___longjmp to return */ + +botch: + CALL(longjmperror) + CALL(abort) + RET /* "can't" get here... */ +END(__longjmp) diff --git a/lib/libc/alpha/gen/signalcontext.c b/lib/libc/alpha/gen/signalcontext.c new file mode 100644 index 0000000..a3f6397 --- /dev/null +++ b/lib/libc/alpha/gen/signalcontext.c @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2003 Marcel Moolenaar + * 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. + * + * 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/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/param.h> +#include <sys/ucontext.h> +#include <signal.h> +#include <stdlib.h> +#include <strings.h> + +typedef void (*handler_t)(uint64_t, uint64_t, uint64_t); + +/* Prototypes */ +static void ctx_wrapper(ucontext_t *ucp, handler_t func, uint64_t *args); + +__weak_reference(__signalcontext, signalcontext); + +int +__signalcontext(ucontext_t *ucp, int sig, __sighandler_t *func) +{ + uint64_t *args; + siginfo_t *sig_si; + ucontext_t *sig_uc; + uint64_t sp; + + /* Bail out if we don't have a valid ucontext pointer. */ + if (ucp == NULL) + abort(); + + /* + * Build a signal frame and copy the arguments of signal handler + * 'func' onto the stack. We only need 3 arguments, but we + * create room for 4 so that we are 16-byte aligned. + */ + sp = (ucp->uc_mcontext.mc_regs[FRAME_SP] - sizeof(ucontext_t)) & ~15UL; + sig_uc = (ucontext_t *)sp; + bcopy(ucp, sig_uc, sizeof(*sig_uc)); + sp = (sp - sizeof(siginfo_t)) & ~15UL; + sig_si = (siginfo_t *)sp; + bzero(sig_si, sizeof(*sig_si)); + sig_si->si_signo = sig; + sp -= 4 * sizeof(uint64_t); + args = (uint64_t *)sp; + args[0] = sig; + args[1] = (intptr_t)sig_si; + args[2] = (intptr_t)sig_uc; + args[3] = 0; + + /* + * Setup the ucontext of the signal handler. + */ + bzero(&ucp->uc_mcontext, sizeof(ucp->uc_mcontext)); + ucp->uc_link = sig_uc; + sigdelset(&ucp->uc_sigmask, sig); + + ucp->uc_mcontext.mc_format = _MC_REV0_TRAPFRAME; + ucp->uc_mcontext.mc_regs[FRAME_A0] = (register_t)ucp; + ucp->uc_mcontext.mc_regs[FRAME_A1] = (register_t)func; + ucp->uc_mcontext.mc_regs[FRAME_A1] = (register_t)args; + ucp->uc_mcontext.mc_regs[FRAME_SP] = (register_t)sp; + ucp->uc_mcontext.mc_regs[FRAME_PC] = (register_t)ctx_wrapper; + ucp->uc_mcontext.mc_regs[FRAME_RA] = (register_t)ctx_wrapper; + ucp->uc_mcontext.mc_regs[FRAME_T12] = (register_t)ctx_wrapper; + return (0); +} + +static void +ctx_wrapper(ucontext_t *ucp, handler_t func, uint64_t *args) +{ + + (*func)(args[0], args[1], args[2]); + if (ucp->uc_link == NULL) + exit(0); + setcontext((const ucontext_t *)ucp->uc_link); + /* should never get here */ + abort(); + /* NOTREACHED */ +} diff --git a/lib/libc/alpha/gen/sigsetjmp.S b/lib/libc/alpha/gen/sigsetjmp.S new file mode 100644 index 0000000..0f7e400 --- /dev/null +++ b/lib/libc/alpha/gen/sigsetjmp.S @@ -0,0 +1,64 @@ +/* $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> +__FBSDID("$FreeBSD$"); + +/* + * 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) + +XLEAF(siglongjmp, 2) +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) diff --git a/lib/libc/alpha/net/Makefile.inc b/lib/libc/alpha/net/Makefile.inc new file mode 100644 index 0000000..b717813 --- /dev/null +++ b/lib/libc/alpha/net/Makefile.inc @@ -0,0 +1,3 @@ +# $FreeBSD$ + +SRCS+= htonl.S htons.S ntohl.S ntohs.S diff --git a/lib/libc/alpha/net/byte_swap_2.S b/lib/libc/alpha/net/byte_swap_2.S new file mode 100644 index 0000000..d7933c4 --- /dev/null +++ b/lib/libc/alpha/net/byte_swap_2.S @@ -0,0 +1,49 @@ +/* $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> +__FBSDID("$FreeBSD$"); + +#if !defined(ALIAS) || !defined(NAME) +#error ALIAS or NAME not defined +#endif + +/* + * Byte-swap a 2-byte quantity. (Convert 0x0123 to 0x2301.) + * + * Argument is an unsigned 2-byte integer (u_int16_t). + */ +XLEAF(ALIAS, 1) +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) diff --git a/lib/libc/alpha/net/byte_swap_4.S b/lib/libc/alpha/net/byte_swap_4.S new file mode 100644 index 0000000..04acc85 --- /dev/null +++ b/lib/libc/alpha/net/byte_swap_4.S @@ -0,0 +1,55 @@ +/* $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> +__FBSDID("$FreeBSD$"); + +#if !defined(ALIAS) || !defined(NAME) +#error ALIAS or NAME not defined +#endif + +/* + * Byte-swap a 4-byte quantity. (Convert 0x01234567 to 0x67452301.) + * + * Argument is an unsigned 4-byte integer (u_int32_t). + */ +XLEAF(ALIAS, 1) +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) diff --git a/lib/libc/alpha/net/htonl.S b/lib/libc/alpha/net/htonl.S new file mode 100644 index 0000000..05c906c --- /dev/null +++ b/lib/libc/alpha/net/htonl.S @@ -0,0 +1,36 @@ +/* $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. + */ + +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#define ALIAS htonl +#define NAME __htonl + +#include "byte_swap_4.S" diff --git a/lib/libc/alpha/net/htons.S b/lib/libc/alpha/net/htons.S new file mode 100644 index 0000000..4bd3a8b --- /dev/null +++ b/lib/libc/alpha/net/htons.S @@ -0,0 +1,36 @@ +/* $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. + */ + +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#define ALIAS htons +#define NAME __htons + +#include "byte_swap_2.S" diff --git a/lib/libc/alpha/net/ntohl.S b/lib/libc/alpha/net/ntohl.S new file mode 100644 index 0000000..a08a162 --- /dev/null +++ b/lib/libc/alpha/net/ntohl.S @@ -0,0 +1,36 @@ +/* $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. + */ + +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#define ALIAS ntohl +#define NAME __ntohl + +#include "byte_swap_4.S" diff --git a/lib/libc/alpha/net/ntohs.S b/lib/libc/alpha/net/ntohs.S new file mode 100644 index 0000000..79e6e0c --- /dev/null +++ b/lib/libc/alpha/net/ntohs.S @@ -0,0 +1,36 @@ +/* $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. + */ + +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#define ALIAS ntohs +#define NAME __ntohs + +#include "byte_swap_2.S" diff --git a/lib/libc/alpha/stdlib/Makefile.inc b/lib/libc/alpha/stdlib/Makefile.inc new file mode 100644 index 0000000..dda8c76 --- /dev/null +++ b/lib/libc/alpha/stdlib/Makefile.inc @@ -0,0 +1,3 @@ +# $FreeBSD$ + +MDSRCS+= abs.c div.c labs.c ldiv.c diff --git a/lib/libc/alpha/string/Makefile.inc b/lib/libc/alpha/string/Makefile.inc new file mode 100644 index 0000000..7bbcc8d --- /dev/null +++ b/lib/libc/alpha/string/Makefile.inc @@ -0,0 +1,3 @@ +# $FreeBSD$ + +MDSRCS+= bcopy.S bzero.S ffs.S memcpy.S memmove.S diff --git a/lib/libc/alpha/string/bcopy.S b/lib/libc/alpha/string/bcopy.S new file mode 100644 index 0000000..dc23063 --- /dev/null +++ b/lib/libc/alpha/string/bcopy.S @@ -0,0 +1,289 @@ +/* $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> +__FBSDID("$FreeBSD$"); + +#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) diff --git a/lib/libc/alpha/string/bzero.S b/lib/libc/alpha/string/bzero.S new file mode 100644 index 0000000..dd94200 --- /dev/null +++ b/lib/libc/alpha/string/bzero.S @@ -0,0 +1,111 @@ +/* $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> +__FBSDID("$FreeBSD$"); + +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) diff --git a/lib/libc/alpha/string/ffs.S b/lib/libc/alpha/string/ffs.S new file mode 100644 index 0000000..11147d6 --- /dev/null +++ b/lib/libc/alpha/string/ffs.S @@ -0,0 +1,92 @@ +/* $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> +__FBSDID("$FreeBSD$"); + +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) diff --git a/lib/libc/alpha/string/memcpy.S b/lib/libc/alpha/string/memcpy.S new file mode 100644 index 0000000..ef50ab1 --- /dev/null +++ b/lib/libc/alpha/string/memcpy.S @@ -0,0 +1,8 @@ +/* $NetBSD: memcpy.S,v 1.1 1995/08/13 00:40:47 cgd Exp $ */ + + +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#define MEMCOPY +#include "bcopy.S" diff --git a/lib/libc/alpha/string/memmove.S b/lib/libc/alpha/string/memmove.S new file mode 100644 index 0000000..ad80b1c --- /dev/null +++ b/lib/libc/alpha/string/memmove.S @@ -0,0 +1,7 @@ +/* $NetBSD: memmove.S,v 1.1 1995/08/13 00:40:48 cgd Exp $ */ + +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#define MEMMOVE +#include "bcopy.S" diff --git a/lib/libc/alpha/sys/Makefile.inc b/lib/libc/alpha/sys/Makefile.inc new file mode 100644 index 0000000..d0b21ed --- /dev/null +++ b/lib/libc/alpha/sys/Makefile.inc @@ -0,0 +1,12 @@ +# $FreeBSD$ + +MDASM+= Ovfork.S brk.S cerror.S exect.S fork.S pipe.S ptrace.S \ + sbrk.S setlogin.S sigreturn.S + +# Don't generate default code for these syscalls: +NOASM= break.o exit.o ftruncate.o getdomainname.o getlogin.o \ + lseek.o mmap.o openbsd_poll.o pread.o \ + pwrite.o setdomainname.o sstk.o truncate.o uname.o vfork.o yield.o + +PSEUDO= _getlogin.o _exit.o + diff --git a/lib/libc/alpha/sys/Ovfork.S b/lib/libc/alpha/sys/Ovfork.S new file mode 100644 index 0000000..99663f1 --- /dev/null +++ b/lib/libc/alpha/sys/Ovfork.S @@ -0,0 +1,38 @@ +/* $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 <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "SYS.h" + +SYSCALL(vfork) + cmovne a4, zero, v0 /* a4 (rv[1]) != 0, child */ + RET +END(__sys_vfork) diff --git a/lib/libc/alpha/sys/brk.S b/lib/libc/alpha/sys/brk.S new file mode 100644 index 0000000..9f3385b --- /dev/null +++ b/lib/libc/alpha/sys/brk.S @@ -0,0 +1,53 @@ +/* $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 <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#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) diff --git a/lib/libc/alpha/sys/cerror.S b/lib/libc/alpha/sys/cerror.S new file mode 100644 index 0000000..5744129 --- /dev/null +++ b/lib/libc/alpha/sys/cerror.S @@ -0,0 +1,56 @@ +/* $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 <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "SYS.h" + +#define FRAME_SIZE 16 +#define FRAME_RA_OFFSET 0 +#define FRAME_V0_OFFSET 8 + +NESTED(.cerror, 0, FRAME_SIZE, ra, IM_RA|IM_V0, 0) + br t0, L1 +L1: LDGP(t0) + + 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) + + ldiq v0, -1 + ldq ra, FRAME_RA_OFFSET(sp) + lda sp, FRAME_SIZE(sp) + RET +END(.cerror) diff --git a/lib/libc/alpha/sys/exect.S b/lib/libc/alpha/sys/exect.S new file mode 100644 index 0000000..8ad065f --- /dev/null +++ b/lib/libc/alpha/sys/exect.S @@ -0,0 +1,38 @@ +/* $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 <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "SYS.h" + +LEAF(exect, 3) + CALLSYS_ERROR(execve) + RET +END(exect) diff --git a/lib/libc/alpha/sys/fork.S b/lib/libc/alpha/sys/fork.S new file mode 100644 index 0000000..5f40896 --- /dev/null +++ b/lib/libc/alpha/sys/fork.S @@ -0,0 +1,38 @@ +/* $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 <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "SYS.h" + +SYSCALL(fork) + cmovne a4, zero, v0 /* a4 (rv[1]) != 0, child */ + RET +END(__sys_fork) diff --git a/lib/libc/alpha/sys/pipe.S b/lib/libc/alpha/sys/pipe.S new file mode 100644 index 0000000..e94398e --- /dev/null +++ b/lib/libc/alpha/sys/pipe.S @@ -0,0 +1,40 @@ +/* $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 <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "SYS.h" + +SYSCALL(pipe) + stl v0, 0(a0) + stl a4, 4(a0) + mov zero, v0 + RET +END(__sys_pipe) diff --git a/lib/libc/alpha/sys/ptrace.S b/lib/libc/alpha/sys/ptrace.S new file mode 100644 index 0000000..8e4c371 --- /dev/null +++ b/lib/libc/alpha/sys/ptrace.S @@ -0,0 +1,40 @@ +/* $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 <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "SYS.h" + +LEAF(ptrace, 4) + LDGP(pv) + stl zero, errno + CALLSYS_ERROR(ptrace) + RET +END(ptrace) diff --git a/lib/libc/alpha/sys/sbrk.S b/lib/libc/alpha/sys/sbrk.S new file mode 100644 index 0000000..4d79906 --- /dev/null +++ b/lib/libc/alpha/sys/sbrk.S @@ -0,0 +1,53 @@ +/* $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 <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#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 + beq a0, L2 + addq a0, a1, a0 + CALLSYS_ERROR(break) + stq a0, curbrk +L2: + mov a1, v0 + RET +END(sbrk) diff --git a/lib/libc/alpha/sys/setlogin.S b/lib/libc/alpha/sys/setlogin.S new file mode 100644 index 0000000..00b1d3c --- /dev/null +++ b/lib/libc/alpha/sys/setlogin.S @@ -0,0 +1,40 @@ +/* $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 <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "SYS.h" + +IMPORT(_logname_valid, 4) /* in _getlogin() */ + +SYSCALL(setlogin) + stl zero, _logname_valid /* clear it */ + RET +END(__sys_setlogin) diff --git a/lib/libc/alpha/sys/sigreturn.S b/lib/libc/alpha/sys/sigreturn.S new file mode 100644 index 0000000..9b13d5f --- /dev/null +++ b/lib/libc/alpha/sys/sigreturn.S @@ -0,0 +1,41 @@ +/* $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 <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#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) |