Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Merge branch 'devel'
[palacios.git] / kitten / arch / x86_64 / lib / thunk.S
1         /*
2          * Save registers before calling assembly functions. This avoids
3          * disturbance of register allocation in some inline assembly constructs.
4          * Copyright 2001,2002 by Andi Kleen, SuSE Labs.
5          * Subject to the GNU public license, v.2. No warranty of any kind.
6          * $Id: thunk.S,v 1.2 2002/03/13 20:06:58 ak Exp $
7          */
8
9         #include <lwk/linkage.h>
10         #include <arch/dwarf2.h>
11         #include <arch/calling.h>                       
12         #include <arch/rwlock.h>
13                 
14         /* rdi: arg1 ... normal C conventions. rax is saved/restored. */        
15         .macro thunk name,func
16         .globl \name
17 \name:  
18         CFI_STARTPROC
19         SAVE_ARGS
20         call \func
21         jmp  restore
22         CFI_ENDPROC
23         .endm
24
25         /* rdi: arg1 ... normal C conventions. rax is passed from C. */         
26         .macro thunk_retrax name,func
27         .globl \name
28 \name:  
29         CFI_STARTPROC
30         SAVE_ARGS
31         call \func
32         jmp  restore_norax
33         CFI_ENDPROC
34         .endm
35         
36
37 #if 0
38         .section .sched.text
39 #ifdef CONFIG_RWSEM_XCHGADD_ALGORITHM
40         thunk rwsem_down_read_failed_thunk,rwsem_down_read_failed
41         thunk rwsem_down_write_failed_thunk,rwsem_down_write_failed
42         thunk rwsem_wake_thunk,rwsem_wake
43         thunk rwsem_downgrade_thunk,rwsem_downgrade_wake
44 #endif  
45         
46         thunk __down_failed,__down
47         thunk_retrax __down_failed_interruptible,__down_interruptible
48         thunk_retrax __down_failed_trylock,__down_trylock
49         thunk __up_wakeup,__up
50 #endif
51         
52         /* SAVE_ARGS below is used only for the .cfi directives it contains. */
53         CFI_STARTPROC
54         SAVE_ARGS
55 restore:
56         RESTORE_ARGS
57         ret     
58         CFI_ENDPROC
59         
60         CFI_STARTPROC
61         SAVE_ARGS
62 restore_norax:  
63         RESTORE_ARGS 1
64         ret
65         CFI_ENDPROC
66
67 /* Support for read/write spinlocks. */
68         .text
69 /* rax: pointer to rwlock_t */  
70 ENTRY(__write_lock_failed)
71         lock
72         addl $RW_LOCK_BIAS,(%rax)
73 1:      rep
74         nop
75         cmpl $RW_LOCK_BIAS,(%rax)
76         jne 1b
77         lock 
78         subl $RW_LOCK_BIAS,(%rax)
79         jnz  __write_lock_failed
80         ret
81
82 /* rax: pointer to rwlock_t */  
83 ENTRY(__read_lock_failed)
84         lock
85         incl (%rax)
86 1:      rep
87         nop
88         cmpl $1,(%rax)
89         js 1b
90         lock
91         decl (%rax)
92         js __read_lock_failed
93         ret