1 # 2 # Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. 3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 # 5 # This code is free software; you can redistribute it and/or modify it 6 # under the terms of the GNU General Public License version 2 only, as 7 # published by the Free Software Foundation. 8 # 9 # This code is distributed in the hope that it will be useful, but WITHOUT 10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 # version 2 for more details (a copy is included in the LICENSE file that 13 # accompanied this code). 14 # 15 # You should have received a copy of the GNU General Public License version 16 # 2 along with this work; if not, write to the Free Software Foundation, 17 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 # 19 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 # or visit www.oracle.com if you need additional information or have any 21 # questions. 22 # 23 24 # Prototype: int SafeFetch32 (int * adr, int ErrValue) 25 # The "ld" at Fetch32 is potentially faulting instruction. 26 # If the instruction traps the trap handler will arrange 27 # for control to resume at Fetch32Resume. 28 # By convention with the trap handler we ensure there is a non-CTI 29 # instruction in the trap shadow. 30 31 32 .globl SafeFetch32, Fetch32PFI, Fetch32Resume 33 .globl SafeFetchN 34 .align 32 35 .type SafeFetch32,@function 36 SafeFetch32: 37 mov %o0, %g1 38 mov %o1, %o0 39 Fetch32PFI: 40 # <-- Potentially faulting instruction 41 ld [%g1], %o0 42 Fetch32Resume: 43 nop 44 retl 45 nop 46 47 .globl SafeFetchN, FetchNPFI, FetchNResume 48 .type SafeFetchN,@function 49 .align 32 50 SafeFetchN: 51 mov %o0, %g1 52 mov %o1, %o0 53 FetchNPFI: 54 ldn [%g1], %o0 55 FetchNResume: 56 nop 57 retl 58 nop 59 60 # Possibilities: 61 # -- membar 62 # -- CAS (SP + BIAS, G0, G0) 63 # -- wr %g0, %asi 64 65 .globl SpinPause 66 .type SpinPause,@function 67 .align 32 68 SpinPause: 69 retl 70 mov %g0, %o0 71 72 .globl _Copy_conjoint_jlongs_atomic 73 .type _Copy_conjoint_jlongs_atomic,@function 74 _Copy_conjoint_jlongs_atomic: 75 cmp %o0, %o1 76 bleu 4f 77 sll %o2, 3, %o4 78 ba 2f 79 1: 80 subcc %o4, 8, %o4 81 std %o2, [%o1] 82 add %o0, 8, %o0 83 add %o1, 8, %o1 84 2: 85 bge,a 1b 86 ldd [%o0], %o2 87 ba 5f 88 nop 89 3: 90 std %o2, [%o1+%o4] 91 4: 92 subcc %o4, 8, %o4 93 bge,a 3b 94 ldd [%o0+%o4], %o2 95 5: 96 retl 97 nop 98 99 100 .globl _flush_reg_windows 101 .align 32 102 _flush_reg_windows: 103 ta 0x03 104 retl 105 mov %fp, %o0