1117756Sdeischen/* 2117756Sdeischen * Copyright (c) 2003 Daniel Eischen <deischen@freebsd.org>. 3117756Sdeischen * All rights reserved. 4117756Sdeischen * 5117756Sdeischen * Redistribution and use in source and binary forms, with or without 6117756Sdeischen * modification, are permitted provided that the following conditions 7117756Sdeischen * are met: 8117756Sdeischen * 1. Redistributions of source code must retain the above copyright 9117756Sdeischen * notice, this list of conditions and the following disclaimer. 10117756Sdeischen * 2. Neither the name of the author nor the names of its contributors 11117756Sdeischen * may be used to endorse or promote products derived from this software 12117756Sdeischen * without specific prior written permission. 13117756Sdeischen * 14117756Sdeischen * THIS SOFTWARE IS PROVIDED BY DANIEL EISCHEN AND CONTRIBUTORS ``AS IS'' AND 15117756Sdeischen * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16117756Sdeischen * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17117756Sdeischen * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18117756Sdeischen * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19117756Sdeischen * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20117756Sdeischen * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21117756Sdeischen * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22117756Sdeischen * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23117756Sdeischen * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24117756Sdeischen * SUCH DAMAGE. 25117756Sdeischen */ 26117756Sdeischen 27117756Sdeischen#include <machine/asm.h> 28117756Sdeischen__FBSDID("$FreeBSD$"); 29117756Sdeischen 30117756Sdeischen 31117756Sdeischen/* 32117756Sdeischen * _amd64_enter_uts(struct kse_mailbox *km, kse_func_t uts, void *stack, 33117756Sdeischen * size_t stacksz); 34117756Sdeischen */ 35117756SdeischenENTRY(_amd64_enter_uts) 36117756Sdeischen addq %rcx, %rdx /* get stack base */ 37118368Sdavidxu andq $~0xf, %rdx /* align to 16 bytes */ 38117756Sdeischen movq %rdx, %rsp /* switch to UTS stack */ 39117756Sdeischen movq %rdx, %rbp /* set frame */ 40132913Sdavidxu callq *%rsi 41132913Sdavidxu ret 42