OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [arch/] [x86_64/] [lib/] [thunk.S] - Blame information for rev 1275

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
        /*
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.1.1.1 2004-04-15 01:36:27 phoenix Exp $
7
         */
8
 
9
        #include 
10
        #include 
11
        #include 
12
        #include 
13
 
14
        /* rdi: arg1 ... normal C conventions. rax is saved/restored. */
15
        .macro thunk name,func
16
        .globl \name
17
\name:
18
        SAVE_ARGS
19
        call \func
20
        jmp  restore
21
        .endm
22
 
23
        /* rdi: arg1 ... normal C conventions. rax is passed from C. */
24
        .macro thunk_retrax name,func
25
        .globl \name
26
\name:
27
        SAVE_ARGS
28
        call \func
29
        jmp  restore_norax
30
        .endm
31
 
32
 
33
#ifdef CONFIG_RWSEM_XCHGADD_ALGORITHM
34
        thunk rwsem_down_read_failed_thunk,rwsem_down_read_failed
35
        thunk rwsem_down_write_failed_thunk,rwsem_down_write_failed
36
        thunk rwsem_wake_thunk,rwsem_wake
37
#endif
38
        thunk do_softirq_thunk,do_softirq
39
 
40
        thunk __down_failed,__down
41
        thunk_retrax __down_failed_interruptible,__down_interruptible
42
        thunk_retrax __down_failed_trylock,__down_trylock
43
        thunk __up_wakeup,__up
44
 
45
restore:
46
        RESTORE_ARGS
47
        ret
48
 
49
restore_norax:
50
        RESTORE_ARGS 1
51
        ret
52
 
53
#ifdef CONFIG_SMP
54
/* Support for read/write spinlocks. */
55
 
56
/* rax: pointer to rwlock_t */
57
ENTRY(__write_lock_failed)
58
        lock
59
        addl $RW_LOCK_BIAS,(%rax)
60
1:      rep
61
        nop
62
        cmpl $RW_LOCK_BIAS,(%rax)
63
        jne 1b
64
        lock
65
        subl $RW_LOCK_BIAS,(%rax)
66
        jnz  __write_lock_failed
67
        ret
68
 
69
/* rax: pointer to rwlock_t */
70
ENTRY(__read_lock_failed)
71
        lock
72
        incl (%rax)
73
1:      rep
74
        nop
75
        cmpl $1,(%rax)
76
        js 1b
77
        lock
78
        decl (%rax)
79
        js __read_lock_failed
80
        ret
81
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.