comparison src/share/vm/prims/unsafe.cpp @ 23660:b5f3a471e646

Merge.
author Doug Simon <doug.simon@oracle.com>
date Wed, 01 Jun 2016 00:11:44 +0200
parents dd9cc155639c 32b682649973
children f13e777eb255
comparison
equal deleted inserted replaced
23411:d7cf78885a3a 23660:b5f3a471e646
1 /* 1 /*
2 * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2000, 2016, 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.
154 } 154 }
155 155
156 156
157 ///// Data in the Java heap. 157 ///// Data in the Java heap.
158 158
159 #define truncate_jboolean(x) ((x) & 1)
160 #define truncate_jbyte(x) (x)
161 #define truncate_jshort(x) (x)
162 #define truncate_jchar(x) (x)
163 #define truncate_jint(x) (x)
164 #define truncate_jlong(x) (x)
165 #define truncate_jfloat(x) (x)
166 #define truncate_jdouble(x) (x)
167
159 #define GET_FIELD(obj, offset, type_name, v) \ 168 #define GET_FIELD(obj, offset, type_name, v) \
160 oop p = JNIHandles::resolve(obj); \ 169 oop p = JNIHandles::resolve(obj); \
161 type_name v = *(type_name*)index_oop_from_field_offset_long(p, offset) 170 type_name v = *(type_name*)index_oop_from_field_offset_long(p, offset)
162 171
163 #define SET_FIELD(obj, offset, type_name, x) \ 172 #define SET_FIELD(obj, offset, type_name, x) \
164 oop p = JNIHandles::resolve(obj); \ 173 oop p = JNIHandles::resolve(obj); \
165 *(type_name*)index_oop_from_field_offset_long(p, offset) = x 174 *(type_name*)index_oop_from_field_offset_long(p, offset) = truncate_##type_name(x)
166 175
167 #define GET_FIELD_VOLATILE(obj, offset, type_name, v) \ 176 #define GET_FIELD_VOLATILE(obj, offset, type_name, v) \
168 oop p = JNIHandles::resolve(obj); \ 177 oop p = JNIHandles::resolve(obj); \
169 if (support_IRIW_for_not_multiple_copy_atomic_cpu) { \ 178 if (support_IRIW_for_not_multiple_copy_atomic_cpu) { \
170 OrderAccess::fence(); \ 179 OrderAccess::fence(); \
171 } \ 180 } \
172 volatile type_name v = OrderAccess::load_acquire((volatile type_name*)index_oop_from_field_offset_long(p, offset)); 181 volatile type_name v = OrderAccess::load_acquire((volatile type_name*)index_oop_from_field_offset_long(p, offset));
173 182
174 #define SET_FIELD_VOLATILE(obj, offset, type_name, x) \ 183 #define SET_FIELD_VOLATILE(obj, offset, type_name, x) \
175 oop p = JNIHandles::resolve(obj); \ 184 oop p = JNIHandles::resolve(obj); \
176 OrderAccess::release_store_fence((volatile type_name*)index_oop_from_field_offset_long(p, offset), x); 185 OrderAccess::release_store_fence((volatile type_name*)index_oop_from_field_offset_long(p, offset), truncate_##type_name(x));
177 186
178 // Macros for oops that check UseCompressedOops 187 // Macros for oops that check UseCompressedOops
179 188
180 #define GET_OOP_FIELD(obj, offset, v) \ 189 #define GET_OOP_FIELD(obj, offset, v) \
181 oop p = JNIHandles::resolve(obj); \ 190 oop p = JNIHandles::resolve(obj); \