equal
deleted
inserted
replaced
1189 bool unnecessary_volatile(const Node *barrier); |
1189 bool unnecessary_volatile(const Node *barrier); |
1190 bool needs_releasing_store(const Node *store); |
1190 bool needs_releasing_store(const Node *store); |
1191 |
1191 |
1192 // predicate controlling translation of CompareAndSwapX |
1192 // predicate controlling translation of CompareAndSwapX |
1193 bool needs_acquiring_load_exclusive(const Node *load); |
1193 bool needs_acquiring_load_exclusive(const Node *load); |
1194 |
|
1195 // predicate controlling translation of StoreCM |
|
1196 bool unnecessary_storestore(const Node *storecm); |
|
1197 |
1194 |
1198 // predicate controlling addressing modes |
1195 // predicate controlling addressing modes |
1199 bool size_fits_all_mem_uses(AddPNode* addp, int shift); |
1196 bool size_fits_all_mem_uses(AddPNode* addp, int shift); |
1200 %} |
1197 %} |
1201 |
1198 |
1581 |
1578 |
1582 // so we can just return true here |
1579 // so we can just return true here |
1583 return true; |
1580 return true; |
1584 } |
1581 } |
1585 |
1582 |
1586 // predicate controlling translation of StoreCM |
|
1587 // |
|
1588 // returns true if a StoreStore must precede the card write otherwise |
|
1589 // false |
|
1590 |
|
1591 bool unnecessary_storestore(const Node *storecm) |
|
1592 { |
|
1593 assert(storecm->Opcode() == Op_StoreCM, "expecting a StoreCM"); |
|
1594 |
|
1595 // we need to generate a dmb ishst between an object put and the |
|
1596 // associated card mark when we are using CMS without conditional |
|
1597 // card marking |
|
1598 |
|
1599 if (UseConcMarkSweepGC && !UseCondCardMark) { |
|
1600 return false; |
|
1601 } |
|
1602 |
|
1603 // a storestore is unnecesary in all other cases |
|
1604 |
|
1605 return true; |
|
1606 } |
|
1607 |
|
1608 |
|
1609 #define __ _masm. |
1583 #define __ _masm. |
1610 |
1584 |
1611 // advance declarations for helper functions to convert register |
1585 // advance declarations for helper functions to convert register |
1612 // indices to register objects |
1586 // indices to register objects |
1613 |
1587 |
7218 |
7192 |
7219 // Store CMS card-mark Immediate |
7193 // Store CMS card-mark Immediate |
7220 instruct storeimmCM0(immI0 zero, memory mem) |
7194 instruct storeimmCM0(immI0 zero, memory mem) |
7221 %{ |
7195 %{ |
7222 match(Set mem (StoreCM mem zero)); |
7196 match(Set mem (StoreCM mem zero)); |
7223 predicate(unnecessary_storestore(n)); |
|
7224 |
7197 |
7225 ins_cost(INSN_COST); |
7198 ins_cost(INSN_COST); |
7226 format %{ "storestore (elided)\n\t" |
7199 format %{ "storestore (elided)\n\t" |
7227 "strb zr, $mem\t# byte" %} |
7200 "strb zr, $mem\t# byte" %} |
7228 |
7201 |