Mercurial > hg > graal-compiler
comparison src/os_cpu/solaris_sparc/vm/solaris_sparc.il @ 2140:85c73c0edb06
7012965: Fix failed on sparc for 7009756: volatile variables could be broken throw reflection API
Summary: Use LDX/STX on v9 and LDD/STD on v8 sparc for volatile long moves.
Reviewed-by: never
author | kvn |
---|---|
date | Tue, 18 Jan 2011 17:10:03 -0800 |
parents | c18cbe5936b8 |
children | 46c544b8fbfc |
comparison
equal
deleted
inserted
replaced
2139:75efcee5ac47 | 2140:85c73c0edb06 |
---|---|
1 // | 1 // |
2 // Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved. | 2 // Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. |
3 // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 // | 4 // |
5 // This code is free software; you can redistribute it and/or modify it | 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 | 6 // under the terms of the GNU General Public License version 2 only, as |
7 // published by the Free Software Foundation. | 7 // published by the Free Software Foundation. |
150 srl %o0, 0, %o1 | 150 srl %o0, 0, %o1 |
151 srlx %o0, 32, %o0 | 151 srlx %o0, 32, %o0 |
152 .nonvolatile | 152 .nonvolatile |
153 .end | 153 .end |
154 | 154 |
155 // Support for jlong Atomic::load and Atomic::store on v8. | |
156 // | |
157 // void _Atomic_move_long_v8(volatile jlong* src, volatile jlong* dst) | |
158 // | |
159 // Arguments: | |
160 // src: O0 | |
161 // dest: O1 | |
162 // | |
163 // Overwrites O2 and O3 | |
164 | |
165 .inline _Atomic_move_long_v8,2 | |
166 .volatile | |
167 ldd [%o0], %o2 | |
168 std %o2, [%o1] | |
169 .nonvolatile | |
170 .end | |
171 | |
172 // Support for jlong Atomic::load and Atomic::store on v9. | |
173 // | |
174 // void _Atomic_move_long_v9(volatile jlong* src, volatile jlong* dst) | |
175 // | |
176 // Arguments: | |
177 // src: O0 | |
178 // dest: O1 | |
179 // | |
180 // Overwrites O2 | |
181 | |
182 .inline _Atomic_move_long_v9,2 | |
183 .volatile | |
184 ldx [%o0], %o2 | |
185 stx %o2, [%o1] | |
186 .nonvolatile | |
187 .end | |
155 | 188 |
156 // Support for jint Atomic::add(jint add_value, volatile jint* dest). | 189 // Support for jint Atomic::add(jint add_value, volatile jint* dest). |
157 // | 190 // |
158 // Arguments: | 191 // Arguments: |
159 // add_value: O0 (e.g., +1 or -1) | 192 // add_value: O0 (e.g., +1 or -1) |