sigsetjmp.S revision 106755
167117Sdfr/* $NetBSD: sigsetjmp.S,v 1.2 1996/10/17 03:08:07 cgd Exp $ */ 267117Sdfr/* $FreeBSD: head/lib/libc/ia64/gen/sigsetjmp.S 106755 2002-11-11 08:11:44Z marcel $ */ 367117Sdfr 467117Sdfr/* 567117Sdfr * Copyright (c) 1994, 1995 Carnegie-Mellon University. 667117Sdfr * All rights reserved. 767117Sdfr * 867117Sdfr * Author: Chris G. Demetriou 967117Sdfr * 1067117Sdfr * Permission to use, copy, modify and distribute this software and 1167117Sdfr * its documentation is hereby granted, provided that both the copyright 1267117Sdfr * notice and this permission notice appear in all copies of the 1367117Sdfr * software, derivative works or modified versions, and any portions 1467117Sdfr * thereof, and that both notices appear in supporting documentation. 1567117Sdfr * 1667117Sdfr * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 1767117Sdfr * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 1867117Sdfr * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 1967117Sdfr * 2067117Sdfr * Carnegie Mellon requests users of this software to return to 2167117Sdfr * 2267117Sdfr * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 2367117Sdfr * School of Computer Science 2467117Sdfr * Carnegie Mellon University 2567117Sdfr * Pittsburgh PA 15213-3890 2667117Sdfr * 2767117Sdfr * any improvements or extensions that they make and grant Carnegie the 2867117Sdfr * rights to redistribute these changes. 2967117Sdfr */ 3067117Sdfr 3185229Sdfr#define LOCORE 3267117Sdfr#include <machine/asm.h> 3385229Sdfr#include <machine/setjmp.h> 3467117Sdfr 3567117Sdfr/* 3667117Sdfr * C library -- sigsetjmp, siglongjmp 3767117Sdfr * 3867117Sdfr * siglongjmp(a,v) 3967117Sdfr * will generate a "return(v)" from 4067117Sdfr * the last call to 4167117Sdfr * sigsetjmp(a, mask) 4267117Sdfr * by restoring registers from the stack. 4367117Sdfr * If `mask' is non-zero, the previous signal 4467117Sdfr * state will be restored. 4567117Sdfr */ 4667117Sdfr 4767117SdfrENTRY(sigsetjmp, 2) 48106755Smarcel add r14=J_SIGMASK,in0 // place to save mask 49106755Smarcel cmp.ne p6,p7=0,in1 // save signal state? 5085229Sdfr ;; 5185229Sdfr st8 [r14]=in1 // save mask value 5285229Sdfr(p6) br.cond.dptk.many setjmp 5385229Sdfr(p7) br.cond.dpnt.many _setjmp 5467117SdfrEND(sigsetjmp) 5567117Sdfr 5685229Sdfr WEAK_ALIAS(siglongjmp,__siglongjmp) 5767117SdfrENTRY(__siglongjmp, 2) 58106755Smarcel add r14=J_SIGMASK,in0 // address of mask value 5985229Sdfr ;; 6085229Sdfr ld8 r14=[r14] 6185229Sdfr ;; 6285229Sdfr cmp.ne p6,p7=0,r14 // did we save signals? 6385229Sdfr(p6) br.cond.dptk.many longjmp 6485229Sdfr(p7) br.cond.dpnt.many _longjmp 6567117SdfrEND(__siglongjmp) 66