1445 _reg_for_constants.append(result); 1446 return result; 1447 } 1448 1449 // Various barriers 1450 1451 void LIRGenerator::pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val, 1452 bool do_load, bool patch, CodeEmitInfo* info) { 1453 // Do the pre-write barrier, if any. 1454 switch (_bs->kind()) { 1455 #if INCLUDE_ALL_GCS 1456 case BarrierSet::G1SATBCTLogging: 1457 G1SATBCardTableModRef_pre_barrier(addr_opr, pre_val, do_load, patch, info); 1458 break; 1459 #endif // INCLUDE_ALL_GCS 1460 case BarrierSet::CardTableForRS: 1461 case BarrierSet::CardTableExtension: 1462 // No pre barriers 1463 break; 1464 case BarrierSet::ModRef: 1465 // No pre barriers 1466 break; 1467 default : 1468 ShouldNotReachHere(); 1469 1470 } 1471 } 1472 1473 void LIRGenerator::post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val) { 1474 switch (_bs->kind()) { 1475 #if INCLUDE_ALL_GCS 1476 case BarrierSet::G1SATBCTLogging: 1477 G1SATBCardTableModRef_post_barrier(addr, new_val); 1478 break; 1479 #endif // INCLUDE_ALL_GCS 1480 case BarrierSet::CardTableForRS: 1481 case BarrierSet::CardTableExtension: 1482 CardTableModRef_post_barrier(addr, new_val); 1483 break; 1484 case BarrierSet::ModRef: 1485 // No post barriers 1486 break; 1487 default : 1488 ShouldNotReachHere(); 1489 } 1490 } 1491 1492 //////////////////////////////////////////////////////////////////////// 1493 #if INCLUDE_ALL_GCS 1494 1495 void LIRGenerator::G1SATBCardTableModRef_pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val, 1496 bool do_load, bool patch, CodeEmitInfo* info) { 1497 // First we test whether marking is in progress. 1498 BasicType flag_type; 1499 if (in_bytes(SATBMarkQueue::byte_width_of_active()) == 4) { 1500 flag_type = T_INT; 1501 } else { 1502 guarantee(in_bytes(SATBMarkQueue::byte_width_of_active()) == 1, 1503 "Assumption"); 1504 // Use unsigned type T_BOOLEAN here rather than signed T_BYTE since some platforms, eg. ARM, | 1445 _reg_for_constants.append(result); 1446 return result; 1447 } 1448 1449 // Various barriers 1450 1451 void LIRGenerator::pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val, 1452 bool do_load, bool patch, CodeEmitInfo* info) { 1453 // Do the pre-write barrier, if any. 1454 switch (_bs->kind()) { 1455 #if INCLUDE_ALL_GCS 1456 case BarrierSet::G1SATBCTLogging: 1457 G1SATBCardTableModRef_pre_barrier(addr_opr, pre_val, do_load, patch, info); 1458 break; 1459 #endif // INCLUDE_ALL_GCS 1460 case BarrierSet::CardTableForRS: 1461 case BarrierSet::CardTableExtension: 1462 // No pre barriers 1463 break; 1464 case BarrierSet::ModRef: 1465 case BarrierSet::Epsilon: 1466 // No pre barriers 1467 break; 1468 default : 1469 ShouldNotReachHere(); 1470 1471 } 1472 } 1473 1474 void LIRGenerator::post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val) { 1475 switch (_bs->kind()) { 1476 #if INCLUDE_ALL_GCS 1477 case BarrierSet::G1SATBCTLogging: 1478 G1SATBCardTableModRef_post_barrier(addr, new_val); 1479 break; 1480 #endif // INCLUDE_ALL_GCS 1481 case BarrierSet::CardTableForRS: 1482 case BarrierSet::CardTableExtension: 1483 CardTableModRef_post_barrier(addr, new_val); 1484 break; 1485 case BarrierSet::ModRef: 1486 case BarrierSet::Epsilon: 1487 // No post barriers 1488 break; 1489 default : 1490 ShouldNotReachHere(); 1491 } 1492 } 1493 1494 //////////////////////////////////////////////////////////////////////// 1495 #if INCLUDE_ALL_GCS 1496 1497 void LIRGenerator::G1SATBCardTableModRef_pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val, 1498 bool do_load, bool patch, CodeEmitInfo* info) { 1499 // First we test whether marking is in progress. 1500 BasicType flag_type; 1501 if (in_bytes(SATBMarkQueue::byte_width_of_active()) == 4) { 1502 flag_type = T_INT; 1503 } else { 1504 guarantee(in_bytes(SATBMarkQueue::byte_width_of_active()) == 1, 1505 "Assumption"); 1506 // Use unsigned type T_BOOLEAN here rather than signed T_BYTE since some platforms, eg. ARM, |