hotspot/src/os_cpu/solaris_sparc/vm/solaris_sparc.s
changeset 1 489c9b5090e2
child 360 21d113ecbf6a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/os_cpu/solaris_sparc/vm/solaris_sparc.s	Sat Dec 01 00:00:00 2007 +0000
@@ -0,0 +1,120 @@
+!!
+!! Copyright 2005-2007 Sun Microsystems, Inc.  All Rights Reserved.
+!! DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+!!
+!! This code is free software; you can redistribute it and/or modify it
+!! under the terms of the GNU General Public License version 2 only, as
+!! published by the Free Software Foundation.
+!!
+!! This code is distributed in the hope that it will be useful, but WITHOUT
+!! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+!! FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+!! version 2 for more details (a copy is included in the LICENSE file that
+!! accompanied this code).
+!!
+!! You should have received a copy of the GNU General Public License version
+!! 2 along with this work; if not, write to the Free Software Foundation,
+!! Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+!!
+!! Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+!! CA 95054 USA or visit www.sun.com if you need additional information or
+!! have any questions.
+!!
+
+    !! Prototype: int SafeFetch32 (int * adr, int ErrValue)
+    !! The "ld" at Fetch32 is potentially faulting instruction.
+    !! If the instruction traps the trap handler will arrange
+    !! for control to resume at Fetch32Resume.  
+    !! By convention with the trap handler we ensure there is a non-CTI
+    !! instruction in the trap shadow.  
+    !!
+    !! The reader might be tempted to move this service to .il.
+    !! Don't.  Sun's CC back-end reads and optimize code emitted 
+    !! by the .il "call", in some cases optimizing the code, completely eliding it,
+    !! or by moving the code from the "call site". 
+        
+
+    .globl  SafeFetch32
+    .align  32
+    .global Fetch32PFI, Fetch32Resume 
+SafeFetch32:
+    mov     %o0, %g1
+    mov     %o1, %o0
+Fetch32PFI:
+    ld      [%g1], %o0          !! <-- Potentially faulting instruction
+Fetch32Resume:
+    nop
+    retl
+    nop
+
+    .globl  SafeFetchN
+    .align  32
+    .globl  FetchNPFI, FetchNResume
+SafeFetchN:
+    mov     %o0, %g1
+    mov     %o1, %o0
+FetchNPFI:
+    ldn     [%g1], %o0
+FetchNResume:
+    nop
+    retl
+    nop
+
+    !! Possibilities:
+    !! -- membar
+    !! -- CAS (SP + BIAS, G0, G0)
+    !! -- wr %g0, %asi
+
+    .global SpinPause
+    .align  32
+SpinPause:
+    retl
+    mov %g0, %o0
+
+
+ 
+    .globl _Copy_conjoint_jlongs_atomic
+    .align 32
+    .global   _Copy_conjoint_jlongs_atomic
+ _Copy_conjoint_jlongs_atomic:
+         cmp     %o0, %o1
+         bleu    4f
+         sll     %o2, 3, %o4
+         ba      2f
+    1:
+         subcc   %o4, 8, %o4
+         std     %o2, [%o1]
+         add     %o0, 8, %o0
+         add     %o1, 8, %o1
+    2:
+         bge,a   1b
+         ldd     [%o0], %o2
+         ba      5f
+         nop
+    3:
+         std     %o2, [%o1+%o4]
+    4:
+         subcc   %o4, 8, %o4
+         bge,a   3b
+         ldd     [%o0+%o4], %o2
+    5:      
+         retl
+         nop
+ 
+ 
+  
+    .globl _raw_thread_id
+    .align 32
+ _raw_thread_id:
+        retl
+        mov     %g7, %o0
+ 
+
+    .globl _flush_reg_windows
+    .align 32
+ _flush_reg_windows:
+        ta 0x03
+        retl
+        mov     %fp, %o0
+ 
+