1413 return _reg_for_constants.at(i);
1414 }
1415 }
1416
1417 LIR_Opr result = new_register(t);
1418 __ move((LIR_Opr)c, result);
1419 _constants.append(c);
1420 _reg_for_constants.append(result);
1421 return result;
1422 }
1423
1424 // Various barriers
1425
1426 void LIRGenerator::pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val,
1427 bool do_load, bool patch, CodeEmitInfo* info) {
1428 // Do the pre-write barrier, if any.
1429 switch (_bs->kind()) {
1430 #if INCLUDE_ALL_GCS
1431 case BarrierSet::G1SATBCT:
1432 case BarrierSet::G1SATBCTLogging:
1433 case BarrierSet::ShenandoahBarrierSet:
1434 G1SATBCardTableModRef_pre_barrier(addr_opr, pre_val, do_load, patch, info);
1435 break;
1436 #endif // INCLUDE_ALL_GCS
1437 case BarrierSet::CardTableModRef:
1438 case BarrierSet::CardTableExtension:
1439 // No pre barriers
1440 break;
1441 case BarrierSet::ModRef:
1442 case BarrierSet::Other:
1443 // No pre barriers
1444 break;
1445 default :
1446 ShouldNotReachHere();
1447
1448 }
1449 }
1450
1451 void LIRGenerator::post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val) {
1452 switch (_bs->kind()) {
1453 #if INCLUDE_ALL_GCS
1454 case BarrierSet::G1SATBCT:
1455 case BarrierSet::G1SATBCTLogging:
1456 G1SATBCardTableModRef_post_barrier(addr, new_val);
1457 break;
1458 case BarrierSet::ShenandoahBarrierSet:
1459 break;
1460 #endif // INCLUDE_ALL_GCS
1461 case BarrierSet::CardTableModRef:
1462 case BarrierSet::CardTableExtension:
1463 CardTableModRef_post_barrier(addr, new_val);
1464 break;
1465 case BarrierSet::ModRef:
1466 case BarrierSet::Other:
1467 // No post barriers
1468 break;
1469 default :
1470 ShouldNotReachHere();
1471 }
1472 }
1473
1474 ////////////////////////////////////////////////////////////////////////
1475 #if INCLUDE_ALL_GCS
1476
1477 void LIRGenerator::G1SATBCardTableModRef_pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val,
1478 bool do_load, bool patch, CodeEmitInfo* info) {
|
1413 return _reg_for_constants.at(i);
1414 }
1415 }
1416
1417 LIR_Opr result = new_register(t);
1418 __ move((LIR_Opr)c, result);
1419 _constants.append(c);
1420 _reg_for_constants.append(result);
1421 return result;
1422 }
1423
1424 // Various barriers
1425
1426 void LIRGenerator::pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val,
1427 bool do_load, bool patch, CodeEmitInfo* info) {
1428 // Do the pre-write barrier, if any.
1429 switch (_bs->kind()) {
1430 #if INCLUDE_ALL_GCS
1431 case BarrierSet::G1SATBCT:
1432 case BarrierSet::G1SATBCTLogging:
1433 G1SATBCardTableModRef_pre_barrier(addr_opr, pre_val, do_load, patch, info);
1434 break;
1435 case BarrierSet::ShenandoahBarrierSet:
1436 if (ShenandoahSATBBarrier) {
1437 G1SATBCardTableModRef_pre_barrier(addr_opr, pre_val, do_load, patch, info);
1438 }
1439 break;
1440 #endif // INCLUDE_ALL_GCS
1441 case BarrierSet::CardTableModRef:
1442 case BarrierSet::CardTableExtension:
1443 // No pre barriers
1444 break;
1445 case BarrierSet::ModRef:
1446 case BarrierSet::Other:
1447 // No pre barriers
1448 break;
1449 default :
1450 ShouldNotReachHere();
1451
1452 }
1453 }
1454
1455 void LIRGenerator::post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val) {
1456 switch (_bs->kind()) {
1457 #if INCLUDE_ALL_GCS
1458 case BarrierSet::G1SATBCT:
1459 case BarrierSet::G1SATBCTLogging:
1460 G1SATBCardTableModRef_post_barrier(addr, new_val);
1461 break;
1462 case BarrierSet::ShenandoahBarrierSet:
1463 ShenandoahBarrierSetC1::bsc1()->storeval_barrier(this, new_val, NULL, false);
1464 break;
1465 #endif // INCLUDE_ALL_GCS
1466 case BarrierSet::CardTableModRef:
1467 case BarrierSet::CardTableExtension:
1468 CardTableModRef_post_barrier(addr, new_val);
1469 break;
1470 case BarrierSet::ModRef:
1471 case BarrierSet::Other:
1472 // No post barriers
1473 break;
1474 default :
1475 ShouldNotReachHere();
1476 }
1477 }
1478
1479 ////////////////////////////////////////////////////////////////////////
1480 #if INCLUDE_ALL_GCS
1481
1482 void LIRGenerator::G1SATBCardTableModRef_pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val,
1483 bool do_load, bool patch, CodeEmitInfo* info) {
|