comparison src/share/vm/opto/graphKit.cpp @ 23054:55d07ec5bde4

8036851: volatile double accesses are not explicitly atomic in C2 Summary: The C2 structure is adapted to distinguish between volatile and non-volatile double accesses. Reviewed-by: twisti, kvn Contributed-by: Tobias Hartmann <tobias.hartmann@oracle.com>
author anoll
date Tue, 06 May 2014 09:17:57 +0200
parents 4eeec0cdeb6a
children c1c199dde5c9
comparison
equal deleted inserted replaced
23053:8c3941f2020c 23054:55d07ec5bde4
1458 debug_only(adr_type = C->get_adr_type(adr_idx)); 1458 debug_only(adr_type = C->get_adr_type(adr_idx));
1459 Node* mem = memory(adr_idx); 1459 Node* mem = memory(adr_idx);
1460 Node* ld; 1460 Node* ld;
1461 if (require_atomic_access && bt == T_LONG) { 1461 if (require_atomic_access && bt == T_LONG) {
1462 ld = LoadLNode::make_atomic(C, ctl, mem, adr, adr_type, t, mo); 1462 ld = LoadLNode::make_atomic(C, ctl, mem, adr, adr_type, t, mo);
1463 } else if (require_atomic_access && bt == T_DOUBLE) {
1464 ld = LoadDNode::make_atomic(C, ctl, mem, adr, adr_type, t, mo);
1463 } else { 1465 } else {
1464 ld = LoadNode::make(_gvn, ctl, mem, adr, adr_type, t, bt, mo); 1466 ld = LoadNode::make(_gvn, ctl, mem, adr, adr_type, t, bt, mo);
1465 } 1467 }
1466 ld = _gvn.transform(ld); 1468 ld = _gvn.transform(ld);
1467 if ((bt == T_OBJECT) && C->do_escape_analysis() || C->eliminate_boxing()) { 1469 if ((bt == T_OBJECT) && C->do_escape_analysis() || C->eliminate_boxing()) {
1480 debug_only(adr_type = C->get_adr_type(adr_idx)); 1482 debug_only(adr_type = C->get_adr_type(adr_idx));
1481 Node *mem = memory(adr_idx); 1483 Node *mem = memory(adr_idx);
1482 Node* st; 1484 Node* st;
1483 if (require_atomic_access && bt == T_LONG) { 1485 if (require_atomic_access && bt == T_LONG) {
1484 st = StoreLNode::make_atomic(C, ctl, mem, adr, adr_type, val, mo); 1486 st = StoreLNode::make_atomic(C, ctl, mem, adr, adr_type, val, mo);
1487 } else if (require_atomic_access && bt == T_DOUBLE) {
1488 st = StoreDNode::make_atomic(C, ctl, mem, adr, adr_type, val, mo);
1485 } else { 1489 } else {
1486 st = StoreNode::make(_gvn, ctl, mem, adr, adr_type, val, bt, mo); 1490 st = StoreNode::make(_gvn, ctl, mem, adr, adr_type, val, bt, mo);
1487 } 1491 }
1488 st = _gvn.transform(st); 1492 st = _gvn.transform(st);
1489 set_memory(st, adr_idx); 1493 set_memory(st, adr_idx);