Bugzilla bug #85673: added assembly implementation of the atomic routines
authorwtc%netscape.com
Fri, 22 Jun 2001 14:25:18 +0000
changeset 1965 eaa11da5e5827c3d0b0a3f896b6dace0c408a2da
parent 1964 d10357d4e2ff8f490605c1d30684717939f867b6
child 1967 dd3e59318f06ae04e02b7c83338bd469d6ca5f69
push idunknown
push userunknown
push dateunknown
bugs85673
Bugzilla bug #85673: added assembly implementation of the atomic routines for OS/2 contributed by Michael Kaply of IBM.
pr/src/md/os2/os2vacpp.asm
new file mode 100644
--- /dev/null
+++ b/pr/src/md/os2/os2vacpp.asm
@@ -0,0 +1,88 @@
+COMMENT | -*- Mode: asm; tab-width: 8; c-basic-offset: 4 -*-
+        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 IBM Corporation.
+        Portions created by IBM are Copyright (C) 2001 IBM 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.
+
+        Windows uses inline assembly for their atomic functions, so we have
+        created an assembly file for VACPP on OS/2
+        |
+
+        .486P
+        .MODEL FLAT, OPTLINK
+        .STACK
+
+        .CODE
+
+;;;---------------------------------------------------------------------
+;;; PRInt32 _Optlink _PR_MD_ATOMIC_SET(PRInt32* val, PRInt32 newval)
+;;;---------------------------------------------------------------------
+_PR_MD_ATOMIC_SET     PROC OPTLINK EXPORT
+        lock xchg    dword ptr [eax],edx
+        mov eax, edx;
+
+        ret
+_PR_MD_ATOMIC_SET     endp
+
+;;;---------------------------------------------------------------------
+;;; PRInt32 _Optlink _PR_MD_ATOMIC_ADD(PRInt32* ptr, PRInt32 val)
+;;;---------------------------------------------------------------------
+_PR_MD_ATOMIC_ADD     PROC OPTLINK EXPORT
+        mov ecx, edx
+        lock xadd dword ptr [eax], edx
+        mov eax, edx
+        add eax, ecx
+
+        ret
+_PR_MD_ATOMIC_ADD     endp
+
+;;;---------------------------------------------------------------------
+;;; PRInt32 _Optlink _PR_MD_ATOMIC_INCREMENT(PRInt32* val)
+;;;---------------------------------------------------------------------
+_PR_MD_ATOMIC_INCREMENT     PROC OPTLINK EXPORT
+        mov edx, 1
+        lock xadd dword ptr [eax], edx
+        mov eax, edx
+        inc eax
+
+        ret
+_PR_MD_ATOMIC_INCREMENT     endp
+
+;;;---------------------------------------------------------------------
+;;; PRInt32 _Optlink _PR_MD_ATOMIC_DECREMENT(PRInt32* val)
+;;;---------------------------------------------------------------------
+_PR_MD_ATOMIC_DECREMENT     PROC OPTLINK EXPORT
+        mov edx, 0ffffffffh
+        lock xadd dword ptr [eax], edx
+        mov eax, edx
+        dec eax
+
+        ret
+_PR_MD_ATOMIC_DECREMENT     endp
+
+        END