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