From: twisti Date: Tue, 16 Jan 2007 09:54:47 +0000 (+0000) Subject: * src/vm/jit/asmpart.h (asm_compare_and_swap): Added. X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=aab0f0c886f44e0044df547ad8dcd7d6629f8f38;p=cacao.git * src/vm/jit/asmpart.h (asm_compare_and_swap): Added. (asm_memory_barrier): Likewise. * src/vm/jit/alpha/asmpart.S (asm_compare_and_swap): New function. (asm_memory_barrier): Likewise. --- diff --git a/src/vm/jit/alpha/asmpart.S b/src/vm/jit/alpha/asmpart.S index 51065bdea..596b44d4a 100644 --- a/src/vm/jit/alpha/asmpart.S +++ b/src/vm/jit/alpha/asmpart.S @@ -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 @@ -22,16 +22,7 @@ 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: diff --git a/src/vm/jit/asmpart.h b/src/vm/jit/asmpart.h index ceb3edf46..1702d5e49 100644 --- a/src/vm/jit/asmpart.h +++ b/src/vm/jit/asmpart.h @@ -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 @@ -22,15 +22,7 @@ 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