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$"); 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) 59279784Snwhitehorn stfd %f14,40 + 23*8(%r3) 60209878Snwhitehorn std %r10,40 + 1*8(%r3) 61279784Snwhitehorn stfd %f15,40 + 24*8(%r3) 62209878Snwhitehorn std %r11,40 + 2*8(%r3) 63279784Snwhitehorn stfd %f16,40 + 25*8(%r3) 64209878Snwhitehorn std %r12,40 + 3*8(%r3) 65279784Snwhitehorn stfd %f17,40 + 26*8(%r3) 66209878Snwhitehorn std %r13,40 + 4*8(%r3) 67279784Snwhitehorn stfd %f18,40 + 27*8(%r3) 68209878Snwhitehorn std %r14,40 + 5*8(%r3) 69279784Snwhitehorn stfd %f19,40 + 28*8(%r3) 70209878Snwhitehorn std %r15,40 + 6*8(%r3) 71279784Snwhitehorn stfd %f20,40 + 29*8(%r3) 72209878Snwhitehorn std %r16,40 + 7*8(%r3) 73279784Snwhitehorn stfd %f21,40 + 30*8(%r3) 74209878Snwhitehorn std %r17,40 + 8*8(%r3) 75279784Snwhitehorn stfd %f22,40 + 31*8(%r3) 76209878Snwhitehorn std %r18,40 + 9*8(%r3) 77279784Snwhitehorn stfd %f23,40 + 32*8(%r3) 78209878Snwhitehorn std %r19,40 + 10*8(%r3) 79279784Snwhitehorn stfd %f24,40 + 33*8(%r3) 80209878Snwhitehorn std %r20,40 + 11*8(%r3) 81279784Snwhitehorn stfd %f25,40 + 34*8(%r3) 82209878Snwhitehorn std %r21,40 + 12*8(%r3) 83279784Snwhitehorn stfd %f26,40 + 35*8(%r3) 84209878Snwhitehorn std %r22,40 + 13*8(%r3) 85279784Snwhitehorn stfd %f27,40 + 36*8(%r3) 86209878Snwhitehorn std %r23,40 + 14*8(%r3) 87279784Snwhitehorn stfd %f28,40 + 37*8(%r3) 88209878Snwhitehorn std %r24,40 + 15*8(%r3) 89279784Snwhitehorn stfd %f29,40 + 38*8(%r3) 90209878Snwhitehorn std %r25,40 + 16*8(%r3) 91279784Snwhitehorn stfd %f30,40 + 39*8(%r3) 92209878Snwhitehorn std %r26,40 + 17*8(%r3) 93279784Snwhitehorn stfd %f31,40 + 40*8(%r3) 94209878Snwhitehorn std %r27,40 + 18*8(%r3) 95209878Snwhitehorn std %r28,40 + 19*8(%r3) 96209878Snwhitehorn std %r29,40 + 20*8(%r3) 97209878Snwhitehorn std %r30,40 + 21*8(%r3) 98209878Snwhitehorn std %r31,40 + 22*8(%r3) 99209878Snwhitehorn li %r3,0 100209878Snwhitehorn blr 101272362SbaptEND(_setjmp) 102209878Snwhitehorn 103209878SnwhitehornENTRY(_longjmp) 104209878Snwhitehorn ld %r9,40 + 0*8(%r3) 105279784Snwhitehorn lfd %f14,40 + 23*8(%r3) 106209878Snwhitehorn ld %r10,40 + 1*8(%r3) 107279784Snwhitehorn lfd %f15,40 + 24*8(%r3) 108209878Snwhitehorn ld %r11,40 + 2*8(%r3) 109279784Snwhitehorn lfd %f16,40 + 25*8(%r3) 110209878Snwhitehorn ld %r12,40 + 3*8(%r3) 111279784Snwhitehorn lfd %f17,40 + 26*8(%r3) 112209878Snwhitehorn ld %r14,40 + 5*8(%r3) 113279784Snwhitehorn lfd %f18,40 + 27*8(%r3) 114209878Snwhitehorn ld %r15,40 + 6*8(%r3) 115279784Snwhitehorn lfd %f19,40 + 28*8(%r3) 116209878Snwhitehorn ld %r16,40 + 7*8(%r3) 117279784Snwhitehorn lfd %f20,40 + 29*8(%r3) 118209878Snwhitehorn ld %r17,40 + 8*8(%r3) 119279784Snwhitehorn lfd %f21,40 + 30*8(%r3) 120209878Snwhitehorn ld %r18,40 + 9*8(%r3) 121279784Snwhitehorn lfd %f22,40 + 31*8(%r3) 122209878Snwhitehorn ld %r19,40 + 10*8(%r3) 123279784Snwhitehorn lfd %f23,40 + 32*8(%r3) 124209878Snwhitehorn ld %r20,40 + 11*8(%r3) 125279784Snwhitehorn lfd %f24,40 + 33*8(%r3) 126209878Snwhitehorn ld %r21,40 + 12*8(%r3) 127279784Snwhitehorn lfd %f25,40 + 34*8(%r3) 128209878Snwhitehorn ld %r22,40 + 13*8(%r3) 129279784Snwhitehorn lfd %f26,40 + 35*8(%r3) 130209878Snwhitehorn ld %r23,40 + 14*8(%r3) 131279784Snwhitehorn lfd %f27,40 + 36*8(%r3) 132209878Snwhitehorn ld %r24,40 + 15*8(%r3) 133279784Snwhitehorn lfd %f28,40 + 37*8(%r3) 134209878Snwhitehorn ld %r25,40 + 16*8(%r3) 135279784Snwhitehorn lfd %f29,40 + 38*8(%r3) 136209878Snwhitehorn ld %r26,40 + 17*8(%r3) 137279784Snwhitehorn lfd %f30,40 + 39*8(%r3) 138209878Snwhitehorn ld %r27,40 + 18*8(%r3) 139279784Snwhitehorn lfd %f31,40 + 40*8(%r3) 140209878Snwhitehorn ld %r28,40 + 19*8(%r3) 141209878Snwhitehorn ld %r29,40 + 20*8(%r3) 142209878Snwhitehorn ld %r30,40 + 21*8(%r3) 143209878Snwhitehorn ld %r31,40 + 22*8(%r3) 144209878Snwhitehorn 145209878Snwhitehorn mtlr %r11 146209878Snwhitehorn mtcr %r12 147209878Snwhitehorn mr %r2,%r9 148209878Snwhitehorn mr %r1,%r10 149209878Snwhitehorn or. %r3,%r4,%r4 150209878Snwhitehorn bnelr 151209878Snwhitehorn li %r3,1 152209878Snwhitehorn blr 153272362SbaptEND(_longjmp) 154217398Skib 155217398Skib .section .note.GNU-stack,"",%progbits 156