1120924Sdeischen/*- 2120924Sdeischen * Copyright (C) 2003 Jake Burkholder <jake@freebsd.org> 3120924Sdeischen * All rights reserved. 4120924Sdeischen * 5120924Sdeischen * Redistribution and use in source and binary forms, with or without 6120924Sdeischen * modification, are permitted provided that the following conditions 7120924Sdeischen * are met: 8120924Sdeischen * 1. Redistributions of source code must retain the above copyright 9120924Sdeischen * notice, this list of conditions and the following disclaimer. 10120924Sdeischen * 2. Neither the name of the author nor the names of its contributors 11120924Sdeischen * may be used to endorse or promote products derived from this software 12120924Sdeischen * without specific prior written permission. 13120924Sdeischen * 14120924Sdeischen * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15120924Sdeischen * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16120924Sdeischen * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17120924Sdeischen * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18120924Sdeischen * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19120924Sdeischen * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20120924Sdeischen * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21120924Sdeischen * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22120924Sdeischen * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23120924Sdeischen * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24120924Sdeischen * SUCH DAMAGE. 25120924Sdeischen */ 26120924Sdeischen 27120924Sdeischen#include <machine/asm.h> 28120924Sdeischen__FBSDID("$FreeBSD$"); 29120924Sdeischen 30120924Sdeischen#include "assym.s" 31120924Sdeischen 32120924Sdeischen .weak CNAME(_thr_getcontext) 33120924Sdeischen .set CNAME(_thr_getcontext),CNAME(__thr_getcontext) 34120924SdeischenENTRY(__thr_getcontext) 35120924Sdeischen add %o7, 8, %o1 36120924Sdeischen add %o1, 4, %o2 37120924Sdeischen stx %sp, [%o0 + MC_OUT + (6 * 8)] 38120924Sdeischen stx %o1, [%o0 + MC_TPC] 39120924Sdeischen stx %o2, [%o0 + MC_TNPC] 40120939Sdeischen mov MC_VALID_FLAGS, %l0 /* Validate the context. */ 41120939Sdeischen stx %l0, [%o0 + MC_FLAGS] 42120939Sdeischen mov 1, %l0 43120939Sdeischen stx %l0, [%o0 + MC_OUT + (0 * 8)] /* return 1 when resumed */ 44120924Sdeischen retl 45120939Sdeischen mov 0, %o0 /* return 0 */ 46120924SdeischenEND(__thr_getcontext) 47120924Sdeischen 48120924Sdeischen .weak CNAME(_thr_setcontext) 49120924Sdeischen .set CNAME(_thr_setcontext),CNAME(__thr_setcontext) 50120924SdeischenENTRY(__thr_setcontext) 51120924Sdeischen save %sp, -CCFSZ, %sp 52120924Sdeischen flushw 53120924Sdeischen mov %i0, %l0 54120924Sdeischen mov %i1, %l1 55120924Sdeischen mov %i2, %l2 56120924Sdeischen ldx [%l0 + MC_GLOBAL + (1 * 8)], %g1 57120924Sdeischen ldx [%l0 + MC_GLOBAL + (2 * 8)], %g2 58120924Sdeischen ldx [%l0 + MC_GLOBAL + (3 * 8)], %g3 59120924Sdeischen ldx [%l0 + MC_GLOBAL + (4 * 8)], %g4 60120924Sdeischen ldx [%l0 + MC_GLOBAL + (5 * 8)], %g5 61120924Sdeischen ldx [%l0 + MC_GLOBAL + (6 * 8)], %g6 62120924Sdeischen ldx [%l0 + MC_GLOBAL + (7 * 8)], %g7 63120924Sdeischen ldx [%l0 + MC_OUT + (0 * 8)], %i0 64120924Sdeischen ldx [%l0 + MC_OUT + (1 * 8)], %i1 65120924Sdeischen ldx [%l0 + MC_OUT + (2 * 8)], %i2 66120924Sdeischen ldx [%l0 + MC_OUT + (3 * 8)], %i3 67120924Sdeischen ldx [%l0 + MC_OUT + (4 * 8)], %i4 68120924Sdeischen ldx [%l0 + MC_OUT + (5 * 8)], %i5 69120924Sdeischen ldx [%l0 + MC_OUT + (6 * 8)], %i6 70120924Sdeischen ldx [%l0 + MC_OUT + (7 * 8)], %i7 71120924Sdeischen ldx [%l0 + MC_TPC], %l4 72120924Sdeischen ldx [%l0 + MC_TNPC], %l3 73120924Sdeischen brz %l2, 1f 74120924Sdeischen nop 75120924Sdeischen stx %l1, [%l2] 76120924Sdeischen1: jmpl %l3, %g0 77120924Sdeischen return %l4 78120924SdeischenEND(__thr_setcontext) 79120924Sdeischen 80120924SdeischenENTRY(_sparc64_enter_uts) 81120924Sdeischen save %sp, -CCFSZ, %sp 82120924Sdeischen flushw 83120924Sdeischen add %i2, %i3, %i2 84120924Sdeischen sub %i2, SPOFF + CCFSZ, %sp 85120956Sdeischen jmpl %i0, %g0 86120956Sdeischen mov %i1, %o0 87120924SdeischenEND(_sparc64_enter_uts) 88