1 //
2 // Copyright (c) 2003, 2012, 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 //
122 movl 16(%esp), %edi // dest
123 movl 8(%esp), %ebx // exchange_value (low)
124 movl 12(%esp), %ecx // exchange_high (high)
125 cmp $0, 28(%esp) // MP test
126 jne 1f
127 cmpxchg8b (%edi)
128 jmp 2f
129 1: lock
130 cmpxchg8b (%edi)
131 2: popl %edi
132 popl %ebx
133 .end
134
135 // Support for jlong Atomic::load and Atomic::store.
136 // void _Atomic_move_long(volatile jlong* src, volatile jlong* dst)
137 .inline _Atomic_move_long,2
138 movl 0(%esp), %eax // src
139 fildll (%eax)
140 movl 4(%esp), %eax // dest
141 fistpll (%eax)
142 .end
143
144 // Support for OrderAccess::acquire()
145 .inline _OrderAccess_acquire,0
146 movl 0(%esp), %eax
147 .end
148
149 // Support for OrderAccess::fence()
150 .inline _OrderAccess_fence,0
151 lock
152 addl $0, (%esp)
153 .end
154
155 // Support for u2 Bytes::swap_u2(u2 x)
156 .inline _raw_swap_u2,1
157 movl 0(%esp), %eax
158 xchgb %al, %ah
159 .end
160
161 // Support for u4 Bytes::swap_u4(u4 x)
162 .inline _raw_swap_u4,1
163 movl 0(%esp), %eax
164 bswap %eax
165 .end
166
167 // Support for u8 Bytes::swap_u8_base(u4 x, u4 y)
168 .inline _raw_swap_u8,2
169 movl 4(%esp), %eax // y
170 movl 0(%esp), %edx // x
171 bswap %eax
172 bswap %edx
|
1 //
2 // Copyright (c) 2003, 2015, 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 //
122 movl 16(%esp), %edi // dest
123 movl 8(%esp), %ebx // exchange_value (low)
124 movl 12(%esp), %ecx // exchange_high (high)
125 cmp $0, 28(%esp) // MP test
126 jne 1f
127 cmpxchg8b (%edi)
128 jmp 2f
129 1: lock
130 cmpxchg8b (%edi)
131 2: popl %edi
132 popl %ebx
133 .end
134
135 // Support for jlong Atomic::load and Atomic::store.
136 // void _Atomic_move_long(volatile jlong* src, volatile jlong* dst)
137 .inline _Atomic_move_long,2
138 movl 0(%esp), %eax // src
139 fildll (%eax)
140 movl 4(%esp), %eax // dest
141 fistpll (%eax)
142 .end
143
144 // Support for u2 Bytes::swap_u2(u2 x)
145 .inline _raw_swap_u2,1
146 movl 0(%esp), %eax
147 xchgb %al, %ah
148 .end
149
150 // Support for u4 Bytes::swap_u4(u4 x)
151 .inline _raw_swap_u4,1
152 movl 0(%esp), %eax
153 bswap %eax
154 .end
155
156 // Support for u8 Bytes::swap_u8_base(u4 x, u4 y)
157 .inline _raw_swap_u8,2
158 movl 4(%esp), %eax // y
159 movl 0(%esp), %edx // x
160 bswap %eax
161 bswap %edx
|