< prev index next >

src/hotspot/cpu/riscv/riscv.ad

Print this page

 1129 int MachNode::pd_alignment_required() const {
 1130   return 1;
 1131 }
 1132 
 1133 int MachNode::compute_padding(int current_offset) const {
 1134   return 0;
 1135 }
 1136 
 1137 // is_CAS(int opcode, bool maybe_volatile)
 1138 //
 1139 // return true if opcode is one of the possible CompareAndSwapX
 1140 // values otherwise false.
 1141 bool is_CAS(int opcode, bool maybe_volatile)
 1142 {
 1143   switch (opcode) {
 1144     // We handle these
 1145     case Op_CompareAndSwapI:
 1146     case Op_CompareAndSwapL:
 1147     case Op_CompareAndSwapP:
 1148     case Op_CompareAndSwapN:
 1149     case Op_ShenandoahCompareAndSwapP:
 1150     case Op_ShenandoahCompareAndSwapN:
 1151     case Op_CompareAndSwapB:
 1152     case Op_CompareAndSwapS:
 1153     case Op_GetAndSetI:
 1154     case Op_GetAndSetL:
 1155     case Op_GetAndSetP:
 1156     case Op_GetAndSetN:
 1157     case Op_GetAndAddI:
 1158     case Op_GetAndAddL:
 1159       return true;
 1160     case Op_CompareAndExchangeI:
 1161     case Op_CompareAndExchangeN:
 1162     case Op_CompareAndExchangeB:
 1163     case Op_CompareAndExchangeS:
 1164     case Op_CompareAndExchangeL:
 1165     case Op_CompareAndExchangeP:
 1166     case Op_WeakCompareAndSwapB:
 1167     case Op_WeakCompareAndSwapS:
 1168     case Op_WeakCompareAndSwapI:
 1169     case Op_WeakCompareAndSwapL:
 1170     case Op_WeakCompareAndSwapP:
 1171     case Op_WeakCompareAndSwapN:
 1172     case Op_ShenandoahWeakCompareAndSwapP:
 1173     case Op_ShenandoahWeakCompareAndSwapN:
 1174     case Op_ShenandoahCompareAndExchangeP:
 1175     case Op_ShenandoahCompareAndExchangeN:
 1176       return maybe_volatile;
 1177     default:
 1178       return false;
 1179   }
 1180 }
 1181 
 1182 constexpr uint64_t MAJIK_DWORD = 0xabbaabbaabbaabbaull;
 1183 
 1184 // predicate controlling translation of CAS
 1185 //
 1186 // returns true if CAS needs to use an acquiring load otherwise false
 1187 bool needs_acquiring_load_reserved(const Node *n)
 1188 {
 1189   assert(n != nullptr && is_CAS(n->Opcode(), true), "expecting a compare and swap");
 1190 
 1191   LoadStoreNode* ldst = n->as_LoadStore();
 1192   if (n != nullptr && is_CAS(n->Opcode(), false)) {
 1193     assert(ldst != nullptr && ldst->trailing_membar() != nullptr, "expected trailing membar");
 1194   } else {
 1195     return ldst != nullptr && ldst->trailing_membar() != nullptr;

 1129 int MachNode::pd_alignment_required() const {
 1130   return 1;
 1131 }
 1132 
 1133 int MachNode::compute_padding(int current_offset) const {
 1134   return 0;
 1135 }
 1136 
 1137 // is_CAS(int opcode, bool maybe_volatile)
 1138 //
 1139 // return true if opcode is one of the possible CompareAndSwapX
 1140 // values otherwise false.
 1141 bool is_CAS(int opcode, bool maybe_volatile)
 1142 {
 1143   switch (opcode) {
 1144     // We handle these
 1145     case Op_CompareAndSwapI:
 1146     case Op_CompareAndSwapL:
 1147     case Op_CompareAndSwapP:
 1148     case Op_CompareAndSwapN:


 1149     case Op_CompareAndSwapB:
 1150     case Op_CompareAndSwapS:
 1151     case Op_GetAndSetI:
 1152     case Op_GetAndSetL:
 1153     case Op_GetAndSetP:
 1154     case Op_GetAndSetN:
 1155     case Op_GetAndAddI:
 1156     case Op_GetAndAddL:
 1157       return true;
 1158     case Op_CompareAndExchangeI:
 1159     case Op_CompareAndExchangeN:
 1160     case Op_CompareAndExchangeB:
 1161     case Op_CompareAndExchangeS:
 1162     case Op_CompareAndExchangeL:
 1163     case Op_CompareAndExchangeP:
 1164     case Op_WeakCompareAndSwapB:
 1165     case Op_WeakCompareAndSwapS:
 1166     case Op_WeakCompareAndSwapI:
 1167     case Op_WeakCompareAndSwapL:
 1168     case Op_WeakCompareAndSwapP:
 1169     case Op_WeakCompareAndSwapN:




 1170       return maybe_volatile;
 1171     default:
 1172       return false;
 1173   }
 1174 }
 1175 
 1176 constexpr uint64_t MAJIK_DWORD = 0xabbaabbaabbaabbaull;
 1177 
 1178 // predicate controlling translation of CAS
 1179 //
 1180 // returns true if CAS needs to use an acquiring load otherwise false
 1181 bool needs_acquiring_load_reserved(const Node *n)
 1182 {
 1183   assert(n != nullptr && is_CAS(n->Opcode(), true), "expecting a compare and swap");
 1184 
 1185   LoadStoreNode* ldst = n->as_LoadStore();
 1186   if (n != nullptr && is_CAS(n->Opcode(), false)) {
 1187     assert(ldst != nullptr && ldst->trailing_membar() != nullptr, "expected trailing membar");
 1188   } else {
 1189     return ldst != nullptr && ldst->trailing_membar() != nullptr;
< prev index next >