6924 ins_cannot_rematerialize(true); |
6924 ins_cannot_rematerialize(true); |
6925 |
6925 |
6926 format %{ "STB #0, $mem \t// CMS card-mark byte (must be 0!), checking requires_release in [$releaseFieldAddr]" %} |
6926 format %{ "STB #0, $mem \t// CMS card-mark byte (must be 0!), checking requires_release in [$releaseFieldAddr]" %} |
6927 ins_encode( enc_cms_card_mark(mem, releaseFieldAddr, crx) ); |
6927 ins_encode( enc_cms_card_mark(mem, releaseFieldAddr, crx) ); |
6928 ins_pipe(pipe_class_memory); |
6928 ins_pipe(pipe_class_memory); |
6929 %} |
|
6930 |
|
6931 // Card-mark for CMS garbage collection. |
|
6932 // This cardmark does an optimization so that it must not always |
|
6933 // do a releasing store. For this, it needs the constant address of |
|
6934 // CMSCollectorCardTableBarrierSetBSExt::_requires_release. |
|
6935 // This constant address is split off here by expand so we can use |
|
6936 // adlc / matcher functionality to load it from the constant section. |
|
6937 instruct storeCM_CMS_ExEx(memory mem, immI_0 zero) %{ |
|
6938 match(Set mem (StoreCM mem zero)); |
|
6939 predicate(UseConcMarkSweepGC); |
|
6940 |
|
6941 expand %{ |
|
6942 immL baseImm %{ 0 /* TODO: PPC port (jlong)CMSCollectorCardTableBarrierSetBSExt::requires_release_address() */ %} |
|
6943 iRegLdst releaseFieldAddress; |
|
6944 flagsReg crx; |
|
6945 loadConL_Ex(releaseFieldAddress, baseImm); |
|
6946 storeCM_CMS(mem, releaseFieldAddress, crx); |
|
6947 %} |
|
6948 %} |
6929 %} |
6949 |
6930 |
6950 instruct storeCM_G1(memory mem, immI_0 zero) %{ |
6931 instruct storeCM_G1(memory mem, immI_0 zero) %{ |
6951 match(Set mem (StoreCM mem zero)); |
6932 match(Set mem (StoreCM mem zero)); |
6952 predicate(UseG1GC); |
6933 predicate(UseG1GC); |