112027Sjungma@eit.uni-kl.de/* iX386_64.s -- assembly support. */
212027Sjungma@eit.uni-kl.de
312027Sjungma@eit.uni-kl.de/*
412027Sjungma@eit.uni-kl.de// QuickThreads -- Threads-building toolkit.
512027Sjungma@eit.uni-kl.de// Copyright (c) 1993 by David Keppel
612027Sjungma@eit.uni-kl.de//
712027Sjungma@eit.uni-kl.de// Permission to use, copy, modify and distribute this software and
812027Sjungma@eit.uni-kl.de// its documentation for any purpose and without fee is hereby
912027Sjungma@eit.uni-kl.de// granted, provided that the above copyright notice and this notice
1012027Sjungma@eit.uni-kl.de// appear in all copies.  This software is provided as a
1112027Sjungma@eit.uni-kl.de// proof-of-concept and for demonstration purposes; there is no
1212027Sjungma@eit.uni-kl.de// representation about the suitability of this software for any
1312027Sjungma@eit.uni-kl.de// purpose. */
1412027Sjungma@eit.uni-kl.de
1512027Sjungma@eit.uni-kl.de/* 64-bit Intel Architecture Support
1612027Sjungma@eit.uni-kl.de// written by Andy Goodrich, Forte Design Systms, Inc.  */
1712027Sjungma@eit.uni-kl.de
1812027Sjungma@eit.uni-kl.de/* NOTE: double-labeled `_name' and `name' for System V compatability.  */
1912027Sjungma@eit.uni-kl.de/* NOTE: Mixed C/C++-style comments used. Sorry! */
2012027Sjungma@eit.uni-kl.de
2112027Sjungma@eit.uni-kl.de    .text
2212027Sjungma@eit.uni-kl.de    .align 2
2312027Sjungma@eit.uni-kl.de
2412027Sjungma@eit.uni-kl.de    .globl _qt_abort
2512027Sjungma@eit.uni-kl.de    .globl qt_abort
2612027Sjungma@eit.uni-kl.de    .globl _qt_block
2712027Sjungma@eit.uni-kl.de    .globl qt_block
2812027Sjungma@eit.uni-kl.de    .globl _qt_blocki
2912027Sjungma@eit.uni-kl.de    .globl qt_blocki
3012027Sjungma@eit.uni-kl.de    .globl _qt_align
3112027Sjungma@eit.uni-kl.de    .globl qt_align
3212027Sjungma@eit.uni-kl.de
3312027Sjungma@eit.uni-kl.de_qt_abort:
3412027Sjungma@eit.uni-kl.deqt_abort:
3512027Sjungma@eit.uni-kl.de_qt_block:
3612027Sjungma@eit.uni-kl.deqt_block:
3712027Sjungma@eit.uni-kl.de_qt_blocki:
3812027Sjungma@eit.uni-kl.deqt_blocki:
3912027Sjungma@eit.uni-kl.de	                 /* 11 (return address.) */
4012027Sjungma@eit.uni-kl.de        pushq %rbp       /* 10 (push stack frame top.) */
4112027Sjungma@eit.uni-kl.de	movq  %rsp, %rbp /* set new stack frame top. */
4212027Sjungma@eit.uni-kl.de	                 /* save registers. */
4312027Sjungma@eit.uni-kl.de	subq $8, %rsp    /*  9 (Stack alignment) */
4412027Sjungma@eit.uni-kl.de	pushq %r12       /*  8 ... */
4512027Sjungma@eit.uni-kl.de	pushq %r13       /*  7 ... */
4612027Sjungma@eit.uni-kl.de	pushq %r14       /*  6 ... */
4712027Sjungma@eit.uni-kl.de	pushq %r15       /*  5 ... */
4812027Sjungma@eit.uni-kl.de	pushq %rbx       /*  4 ... */
4912027Sjungma@eit.uni-kl.de	pushq %rcx       /*  3 ... (new stack address) */
5012027Sjungma@eit.uni-kl.de	pushq %rdx       /*  2 ... (arg) */
5112027Sjungma@eit.uni-kl.de	pushq %rdi       /*  1 ... (address of save function.) */
5212027Sjungma@eit.uni-kl.de	pushq %rsi       /*  0 ... (cor) */
5312027Sjungma@eit.uni-kl.de
5412027Sjungma@eit.uni-kl.de    movq %rdi, %rax  /* get address of save function. */
5512027Sjungma@eit.uni-kl.de    movq %rsp, %rdi  /* set current stack as save argument. */
5612027Sjungma@eit.uni-kl.de	movq %rcx, %rsp  /* swap stacks. */
5712027Sjungma@eit.uni-kl.de	movq %rcx, %rbp  /* adjust stack frame pointer. */
5812027Sjungma@eit.uni-kl.de	addq $10*8, %rbp /* ... */
5912027Sjungma@eit.uni-kl.de    call *%rax      /* call function to save stack pointer. */
6012027Sjungma@eit.uni-kl.de
6112027Sjungma@eit.uni-kl.de	                /* restore registers. */
6212027Sjungma@eit.uni-kl.de	popq %rsi       /* ... */
6312027Sjungma@eit.uni-kl.de	popq %rdi       /* ... */
6412027Sjungma@eit.uni-kl.de	popq %rdx       /* ... */
6512027Sjungma@eit.uni-kl.de	popq %rcx       /* ... */
6612027Sjungma@eit.uni-kl.de	popq %rbx       /* ... */
6712027Sjungma@eit.uni-kl.de	popq %r15       /* restore registers from new stack. */
6812027Sjungma@eit.uni-kl.de	popq %r14       /* ... */
6912027Sjungma@eit.uni-kl.de	popq %r13       /* ... */
7012027Sjungma@eit.uni-kl.de	popq %r12       /* ... */
7112027Sjungma@eit.uni-kl.de	leave           /* unwind stack. */
7212027Sjungma@eit.uni-kl.de_qt_align:
7312027Sjungma@eit.uni-kl.deqt_align:
7412027Sjungma@eit.uni-kl.de	ret             /* return. */
75