* src/vm/jit/asmpart.h (asm_compare_and_swap): Added.
authortwisti <none@none>
Tue, 16 Jan 2007 09:54:47 +0000 (09:54 +0000)
committertwisti <none@none>
Tue, 16 Jan 2007 09:54:47 +0000 (09:54 +0000)
(asm_memory_barrier): Likewise.

* src/vm/jit/alpha/asmpart.S (asm_compare_and_swap): New function.
(asm_memory_barrier): Likewise.

src/vm/jit/alpha/asmpart.S
src/vm/jit/asmpart.h

index 51065bdea68fb7d2770aec9475d538ee06953552..596b44d4a602d95b417e93f5325f4717e7a43b3b 100644 (file)
@@ -1,6 +1,6 @@
 /* src/vm/jit/alpha/asmpart.S - Java-C interface functions for alpha
 
-   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
    C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
    E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
    J. Wenninger, Institut f. Computersprachen - TU Wien
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Contact: cacao@cacaojvm.org
-
-   Authors: Andreas Krall
-            Reinhard Grafl
-
-   Changes: Joseph Wenninger
-            Christian Thalinger
-               Edwin Steiner
-
-   $Id: asmpart.S 6265 2007-01-02 20:40:57Z edwin $
+   $Id: asmpart.S 7216 2007-01-16 09:54:47Z twisti $
 
 */
 
@@ -74,6 +65,9 @@
        .globl asm_replacement_in
 #endif
 
+       .globl asm_compare_and_swap
+       .globl asm_memory_barrier
+
        .globl asm_criticalsections
        .globl asm_getclassvalues_atomic
 
@@ -748,6 +742,44 @@ asm_replacement_in:
 #endif /* defined(ENABLE_REPLACEMENT) */
 
 
+/* asm_compare_and_swap ********************************************************
+
+   Does an atomic compare and swap.  Required for the lock
+   implementation.
+
+*******************************************************************************/
+
+       .ent    asm_compare_and_swap
+
+asm_compare_and_swap:
+1:
+       ldq_l   v0,0(a0)
+       cmpeq   v0,a1,t0
+       beq     t0,2f
+       mov     a2,t0
+       stq_c   t0,0(a0)
+       beq     t0,1b
+2:
+       jmp     zero,(ra)
+
+       .end    asm_compare_and_swap
+
+
+/* asm_memory_barrier **********************************************************
+
+   A memory barrier for the Java Memory Model.
+
+*******************************************************************************/
+
+       .ent    asm_memory_barrier
+
+asm_memory_barrier:
+       mb
+       jmp     zero,(ra)
+
+       .end    asm_memory_barrier
+
+
        .ent    asm_getclassvalues_atomic
 
 asm_getclassvalues_atomic:
index ceb3edf4670b17690f4b6e211edc002dff459155..1702d5e49ba48e7e77098c33b260d81aeb3a69e8 100644 (file)
@@ -1,6 +1,6 @@
 /* src/vm/jit/asmpart.h - prototypes for machine specfic functions
 
-   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
    C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
    E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
    J. Wenninger, Institut f. Computersprachen - TU Wien
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Contact: cacao@cacaojvm.org
-
-   Authors: Reinhard Grafl
-            Andreas Krall
-
-   Changes: Christian Thalinger
-            Edwin Steiner
-
-   $Id: asmpart.h 6265 2007-01-02 20:40:57Z edwin $
+   $Id: asmpart.h 7216 2007-01-16 09:54:47Z twisti $
 
 */
 
@@ -155,6 +147,9 @@ void asm_replacement_out(void);
 void asm_replacement_in(executionstate_t *es, replace_safestack_t *st);
 #endif
 
+long asm_compare_and_swap(volatile long *p, long oldval, long newval);
+void asm_memory_barrier(void);
+
 #if defined(ENABLE_THREADS)
 extern critical_section_node_t asm_criticalsections;
 #endif