Upload Tizen:Base source
[toolchains/nspr.git] / mozilla / nsprpub / pr / src / md / unix / os_Darwin_x86_64.s
1 # -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2
3 # ***** BEGIN LICENSE BLOCK *****
4 # Version: MPL 1.1#GPL 2.0#LGPL 2.1
5 #
6 # The contents of this file are subject to the Mozilla Public License Version
7 # 1.1 (the "License"); you may not use this file except in compliance with
8 # the License. You may obtain a copy of the License at
9 # http:##www.mozilla.org#MPL#
10 #
11 # Software distributed under the License is distributed on an "AS IS" basis,
12 # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13 # for the specific language governing rights and limitations under the
14 # License.
15 #
16 # The Original Code is the Netscape Portable Runtime (NSPR).
17 #
18 # The Initial Developer of the Original Code is
19 # Netscape Communications Corporation.
20 # Portions created by the Initial Developer are Copyright (C) 2004
21 # the Initial Developer. All Rights Reserved.
22 #
23 # Contributor(s):
24 #
25 # Alternatively, the contents of this file may be used under the terms of
26 # either the GNU General Public License Version 2 or later (the "GPL"), or
27 # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
28 # in which case the provisions of the GPL or the LGPL are applicable instead
29 # of those above. If you wish to allow use of your version of this file only
30 # under the terms of either the GPL or the LGPL, and not to allow others to
31 # use your version of this file under the terms of the MPL, indicate your
32 # decision by deleting the provisions above and replace them with the notice
33 # and other provisions required by the GPL or the LGPL. If you do not delete
34 # the provisions above, a recipient may use your version of this file under
35 # the terms of any one of the MPL, the GPL or the LGPL.
36 #
37 # ***** END LICENSE BLOCK *****
38
39 # PRInt32 __PR_Darwin_x86_64_AtomicIncrement(PRInt32 *val)
40 #
41 # Atomically increment the integer pointed to by 'val' and return
42 # the result of the increment.
43 #
44     .text
45     .globl __PR_Darwin_x86_64_AtomicIncrement
46     .private_extern __PR_Darwin_x86_64_AtomicIncrement
47     .align 4
48 __PR_Darwin_x86_64_AtomicIncrement:
49     movl $1, %eax
50     lock
51     xaddl %eax, (%rdi)
52     incl %eax
53     ret
54
55 # PRInt32 __PR_Darwin_x86_64_AtomicDecrement(PRInt32 *val)
56 #
57 # Atomically decrement the integer pointed to by 'val' and return
58 # the result of the decrement.
59 #
60     .text
61     .globl __PR_Darwin_x86_64_AtomicDecrement
62     .private_extern __PR_Darwin_x86_64_AtomicDecrement
63     .align 4
64 __PR_Darwin_x86_64_AtomicDecrement:
65     movl $-1, %eax
66     lock
67     xaddl %eax, (%rdi)
68     decl %eax
69     ret
70
71 # PRInt32 __PR_Darwin_x86_64_AtomicSet(PRInt32 *val, PRInt32 newval)
72 #
73 # Atomically set the integer pointed to by 'val' to the new
74 # value 'newval' and return the old value.
75 #
76     .text
77     .globl __PR_Darwin_x86_64_AtomicSet
78     .private_extern __PR_Darwin_x86_64_AtomicSet
79     .align 4
80 __PR_Darwin_x86_64_AtomicSet:
81     movl %esi, %eax
82     xchgl %eax, (%rdi)
83     ret
84
85 # PRInt32 __PR_Darwin_x86_64_AtomicAdd(PRInt32 *ptr, PRInt32 val)
86 #
87 # Atomically add 'val' to the integer pointed to by 'ptr'
88 # and return the result of the addition.
89 #
90     .text
91     .globl __PR_Darwin_x86_64_AtomicAdd
92     .private_extern __PR_Darwin_x86_64_AtomicAdd
93     .align 4
94 __PR_Darwin_x86_64_AtomicAdd:
95     movl %esi, %eax
96     lock
97     xaddl %eax, (%rdi)
98     addl %esi, %eax
99     ret