_setjmp.S revision 272362
1209878Snwhitehorn/*- 2209878Snwhitehorn * Copyright (c) 2002 Peter Grehan. 3209878Snwhitehorn * All rights reserved. 4209878Snwhitehorn * 5209878Snwhitehorn * Redistribution and use in source and binary forms, with or without 6209878Snwhitehorn * modification, are permitted provided that the following conditions 7209878Snwhitehorn * are met: 8209878Snwhitehorn * 1. Redistributions of source code must retain the above copyright 9209878Snwhitehorn * notice, this list of conditions and the following disclaimer. 10209878Snwhitehorn * 2. Redistributions in binary form must reproduce the above copyright 11209878Snwhitehorn * notice, this list of conditions and the following disclaimer in the 12209878Snwhitehorn * documentation and/or other materials provided with the distribution. 13209878Snwhitehorn * 14209878Snwhitehorn * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15209878Snwhitehorn * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16209878Snwhitehorn * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17209878Snwhitehorn * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18209878Snwhitehorn * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19209878Snwhitehorn * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20209878Snwhitehorn * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21209878Snwhitehorn * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22209878Snwhitehorn * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23209878Snwhitehorn * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24209878Snwhitehorn * SUCH DAMAGE. 25209878Snwhitehorn */ 26209878Snwhitehorn/* $NetBSD: _setjmp.S,v 1.1 1997/03/29 20:55:53 thorpej Exp $ */ 27209878Snwhitehorn 28209878Snwhitehorn#include <machine/asm.h> 29209878Snwhitehorn__FBSDID("$FreeBSD: head/lib/libc/powerpc64/gen/_setjmp.S 272362 2014-10-01 15:00:21Z bapt $"); 30209878Snwhitehorn 31209878Snwhitehorn/* 32209878Snwhitehorn * C library -- _setjmp, _longjmp 33209878Snwhitehorn * 34209878Snwhitehorn * _longjmp(a,v) 35209878Snwhitehorn * will generate a "return(v?v:1)" from the last call to 36209878Snwhitehorn * _setjmp(a) 37209878Snwhitehorn * by restoring registers from the stack. 38209878Snwhitehorn * The previous signal state is NOT restored. 39209878Snwhitehorn * 40209878Snwhitehorn * jmpbuf layout: 41209878Snwhitehorn * +------------+ 42209878Snwhitehorn * | unused | 43209878Snwhitehorn * +------------+ 44209878Snwhitehorn * | unused | 45209878Snwhitehorn * | | 46209878Snwhitehorn * | (4 words) | 47209878Snwhitehorn * | | 48209878Snwhitehorn * +------------+ 49209878Snwhitehorn * | saved regs | 50209878Snwhitehorn * | ... | 51209878Snwhitehorn */ 52209878Snwhitehorn 53209878SnwhitehornENTRY(_setjmp) 54209878Snwhitehorn mflr %r11 55209878Snwhitehorn mfcr %r12 56209878Snwhitehorn mr %r10,%r1 57209878Snwhitehorn mr %r9,%r2 58209878Snwhitehorn std %r9,40 + 0*8(%r3) 59209878Snwhitehorn std %r10,40 + 1*8(%r3) 60209878Snwhitehorn std %r11,40 + 2*8(%r3) 61209878Snwhitehorn std %r12,40 + 3*8(%r3) 62209878Snwhitehorn std %r13,40 + 4*8(%r3) 63209878Snwhitehorn std %r14,40 + 5*8(%r3) 64209878Snwhitehorn std %r15,40 + 6*8(%r3) 65209878Snwhitehorn std %r16,40 + 7*8(%r3) 66209878Snwhitehorn std %r17,40 + 8*8(%r3) 67209878Snwhitehorn std %r18,40 + 9*8(%r3) 68209878Snwhitehorn std %r19,40 + 10*8(%r3) 69209878Snwhitehorn std %r20,40 + 11*8(%r3) 70209878Snwhitehorn std %r21,40 + 12*8(%r3) 71209878Snwhitehorn std %r22,40 + 13*8(%r3) 72209878Snwhitehorn std %r23,40 + 14*8(%r3) 73209878Snwhitehorn std %r24,40 + 15*8(%r3) 74209878Snwhitehorn std %r25,40 + 16*8(%r3) 75209878Snwhitehorn std %r26,40 + 17*8(%r3) 76209878Snwhitehorn std %r27,40 + 18*8(%r3) 77209878Snwhitehorn std %r28,40 + 19*8(%r3) 78209878Snwhitehorn std %r29,40 + 20*8(%r3) 79209878Snwhitehorn std %r30,40 + 21*8(%r3) 80209878Snwhitehorn std %r31,40 + 22*8(%r3) 81209878Snwhitehorn li %r3,0 82209878Snwhitehorn blr 83272362SbaptEND(_setjmp) 84209878Snwhitehorn 85209878SnwhitehornENTRY(_longjmp) 86209878Snwhitehorn ld %r9,40 + 0*8(%r3) 87209878Snwhitehorn ld %r10,40 + 1*8(%r3) 88209878Snwhitehorn ld %r11,40 + 2*8(%r3) 89209878Snwhitehorn ld %r12,40 + 3*8(%r3) 90209878Snwhitehorn ld %r14,40 + 5*8(%r3) 91209878Snwhitehorn ld %r15,40 + 6*8(%r3) 92209878Snwhitehorn ld %r16,40 + 7*8(%r3) 93209878Snwhitehorn ld %r17,40 + 8*8(%r3) 94209878Snwhitehorn ld %r18,40 + 9*8(%r3) 95209878Snwhitehorn ld %r19,40 + 10*8(%r3) 96209878Snwhitehorn ld %r20,40 + 11*8(%r3) 97209878Snwhitehorn ld %r21,40 + 12*8(%r3) 98209878Snwhitehorn ld %r22,40 + 13*8(%r3) 99209878Snwhitehorn ld %r23,40 + 14*8(%r3) 100209878Snwhitehorn ld %r24,40 + 15*8(%r3) 101209878Snwhitehorn ld %r25,40 + 16*8(%r3) 102209878Snwhitehorn ld %r26,40 + 17*8(%r3) 103209878Snwhitehorn ld %r27,40 + 18*8(%r3) 104209878Snwhitehorn ld %r28,40 + 19*8(%r3) 105209878Snwhitehorn ld %r29,40 + 20*8(%r3) 106209878Snwhitehorn ld %r30,40 + 21*8(%r3) 107209878Snwhitehorn ld %r31,40 + 22*8(%r3) 108209878Snwhitehorn 109209878Snwhitehorn mtlr %r11 110209878Snwhitehorn mtcr %r12 111209878Snwhitehorn mr %r2,%r9 112209878Snwhitehorn mr %r1,%r10 113209878Snwhitehorn or. %r3,%r4,%r4 114209878Snwhitehorn bnelr 115209878Snwhitehorn li %r3,1 116209878Snwhitehorn blr 117272362SbaptEND(_longjmp) 118217398Skib 119217398Skib .section .note.GNU-stack,"",%progbits 120