Merged the recent changes from NSPRPUB_PRE_4_2_CLIENT_BRANCH to the trunk.
authorwtc%netscape.com
Wed, 14 May 2003 01:32:58 +0000
changeset 2822 e8e3198c7715b23e2f52c8e7c4bdc3cf129fcd5f
parent 2821 d928f74ae1cc495d01b7ac018680665b07056e80
child 2823 af91d584ced64afe2a897f7bb4baa22af5a04be6
push idunknown
push userunknown
push dateunknown
Merged the recent changes from NSPRPUB_PRE_4_2_CLIENT_BRANCH to the trunk. Added Files: os2emx.s
pr/src/md/os2/os2emx.s
new file mode 100644
--- /dev/null
+++ b/pr/src/md/os2/os2emx.s
@@ -0,0 +1,111 @@
+/ -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/ 
+/ The contents of this file are subject to the Mozilla Public
+/ License Version 1.1 (the "License"); you may not use this file
+/ except in compliance with the License. You may obtain a copy of
+/ the License at http://www.mozilla.org/MPL/
+/ 
+/ Software distributed under the License is distributed on an "AS
+/ IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+/ implied. See the License for the specific language governing
+/ rights and limitations under the License.
+/ 
+/ The Original Code is the Netscape Portable Runtime (NSPR).
+/ 
+/ The Initial Developer of the Original Code is Netscape
+/ Communications Corporation.  Portions created by Netscape are 
+/ Copyright (C) 2000 Netscape Communications Corporation.  All
+/ Rights Reserved.
+/ 
+/ Contributor(s):
+/ 
+/ Alternatively, the contents of this file may be used under the
+/ terms of the GNU General Public License Version 2 or later (the
+/ "GPL"), in which case the provisions of the GPL are applicable 
+/ instead of those above.  If you wish to allow use of your 
+/ version of this file only under the terms of the GPL and not to
+/ allow others to use your version of this file under the MPL,
+/ indicate your decision by deleting the provisions above and
+/ replace them with the notice and other provisions required by
+/ the GPL.  If you do not delete the provisions above, a recipient
+/ may use your version of this file under either the MPL or the
+/ GPL.
+/ 
+
+/ PRInt32 __PR_MD_ATOMIC_INCREMENT(PRInt32 *val)
+/
+/ Atomically increment the integer pointed to by 'val' and return
+/ the result of the increment.
+/
+    .text
+    .globl __PR_MD_ATOMIC_INCREMENT
+    .align 4
+__PR_MD_ATOMIC_INCREMENT:
+    movl 4(%esp), %ecx
+    movl $1, %eax
+    lock
+    xaddl %eax, (%ecx)
+    incl %eax
+    ret
+
+/ PRInt32 __PR_MD_ATOMIC_DECREMENT(PRInt32 *val)
+/
+/ Atomically decrement the integer pointed to by 'val' and return
+/ the result of the decrement.
+/
+    .text
+    .globl __PR_MD_ATOMIC_DECREMENT
+    .align 4
+__PR_MD_ATOMIC_DECREMENT:
+    movl 4(%esp), %ecx
+    movl $-1, %eax
+    lock
+    xaddl %eax, (%ecx)
+    decl %eax
+    ret
+
+/ PRInt32 __PR_MD_ATOMIC_SET(PRInt32 *val, PRInt32 newval)
+/
+/ Atomically set the integer pointed to by 'val' to the new
+/ value 'newval' and return the old value.
+/
+/ An alternative implementation:
+/   .text
+/   .globl __PR_MD_ATOMIC_SET
+/   .align 4
+/__PR_MD_ATOMIC_SET:
+/   movl 4(%esp), %ecx
+/   movl 8(%esp), %edx
+/   movl (%ecx), %eax
+/retry:
+/   lock
+/   cmpxchgl %edx, (%ecx)
+/   jne retry
+/   ret
+/
+    .text
+    .globl __PR_MD_ATOMIC_SET
+    .align 4
+__PR_MD_ATOMIC_SET:
+    movl 4(%esp), %ecx
+    movl 8(%esp), %eax
+    lock
+    xchgl %eax, (%ecx)
+    ret
+
+/ PRInt32 __PR_MD_ATOMIC_ADD(PRInt32 *ptr, PRInt32 val)
+/
+/ Atomically add 'val' to the integer pointed to by 'ptr'
+/ and return the result of the addition.
+/
+    .text
+    .globl __PR_MD_ATOMIC_ADD
+    .align 4
+__PR_MD_ATOMIC_ADD:
+    movl 4(%esp), %ecx
+    movl 8(%esp), %eax
+    movl %eax, %edx
+    lock
+    xaddl %eax, (%ecx)
+    addl %edx, %eax
+    ret