equal
deleted
inserted
replaced
2984 Label notDouble; |
2984 Label notDouble; |
2985 __ cmpl(flags, dtos); |
2985 __ cmpl(flags, dtos); |
2986 __ jcc(Assembler::notEqual, notDouble); |
2986 __ jcc(Assembler::notEqual, notDouble); |
2987 #endif |
2987 #endif |
2988 // dtos |
2988 // dtos |
2989 __ access_load_at(T_DOUBLE, IN_HEAP, noreg /* dtos */, field, noreg, noreg); |
2989 // MO_RELAXED: for the case of volatile field, in fact it adds no extra work for the underlying implementation |
|
2990 __ access_load_at(T_DOUBLE, IN_HEAP | MO_RELAXED, noreg /* dtos */, field, noreg, noreg); |
2990 __ push(dtos); |
2991 __ push(dtos); |
2991 // Rewrite bytecode to be faster |
2992 // Rewrite bytecode to be faster |
2992 if (!is_static && rc == may_rewrite) { |
2993 if (!is_static && rc == may_rewrite) { |
2993 patch_bytecode(Bytecodes::_fast_dgetfield, bc, rbx); |
2994 patch_bytecode(Bytecodes::_fast_dgetfield, bc, rbx); |
2994 } |
2995 } |
3253 |
3254 |
3254 // ltos |
3255 // ltos |
3255 { |
3256 { |
3256 __ pop(ltos); |
3257 __ pop(ltos); |
3257 if (!is_static) pop_and_check_object(obj); |
3258 if (!is_static) pop_and_check_object(obj); |
3258 __ access_store_at(T_LONG, IN_HEAP, field, noreg /* ltos*/, noreg, noreg); |
3259 // MO_RELAXED: generate atomic store for the case of volatile field (important for x86_32) |
|
3260 __ access_store_at(T_LONG, IN_HEAP | MO_RELAXED, field, noreg /* ltos*/, noreg, noreg); |
3259 #ifdef _LP64 |
3261 #ifdef _LP64 |
3260 if (!is_static && rc == may_rewrite) { |
3262 if (!is_static && rc == may_rewrite) { |
3261 patch_bytecode(Bytecodes::_fast_lputfield, bc, rbx, true, byte_no); |
3263 patch_bytecode(Bytecodes::_fast_lputfield, bc, rbx, true, byte_no); |
3262 } |
3264 } |
3263 #endif // _LP64 |
3265 #endif // _LP64 |
3288 |
3290 |
3289 // dtos |
3291 // dtos |
3290 { |
3292 { |
3291 __ pop(dtos); |
3293 __ pop(dtos); |
3292 if (!is_static) pop_and_check_object(obj); |
3294 if (!is_static) pop_and_check_object(obj); |
3293 __ access_store_at(T_DOUBLE, IN_HEAP, field, noreg /* dtos */, noreg, noreg); |
3295 // MO_RELAXED: for the case of volatile field, in fact it adds no extra work for the underlying implementation |
|
3296 __ access_store_at(T_DOUBLE, IN_HEAP | MO_RELAXED, field, noreg /* dtos */, noreg, noreg); |
3294 if (!is_static && rc == may_rewrite) { |
3297 if (!is_static && rc == may_rewrite) { |
3295 patch_bytecode(Bytecodes::_fast_dputfield, bc, rbx, true, byte_no); |
3298 patch_bytecode(Bytecodes::_fast_dputfield, bc, rbx, true, byte_no); |
3296 } |
3299 } |
3297 } |
3300 } |
3298 |
3301 |