graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILHotSpotReplacementsUtil.java

Print this page




  33 //JaCoCo Exclude
  34 
  35 /**
  36  * A collection of methods used in HSAIL-specific snippets and substitutions.
  37  */
  38 public class HSAILHotSpotReplacementsUtil extends HotSpotReplacementsUtil {
  39 
  40     private static HotSpotRegistersProvider hsailRegisters;
  41 
  42     public static void initialize(HotSpotRegistersProvider registers) {
  43         hsailRegisters = registers;
  44     }
  45 
  46     public static final LocationIdentity TLAB_INFO_LOCATION = new NamedLocationIdentity("TlabInfo");
  47     public static final LocationIdentity TLABINFO_LASTGOODTOP_LOCATION = new NamedLocationIdentity("TlabInfoLastGoodTop");
  48     public static final LocationIdentity TLABINFO_END_LOCATION = new NamedLocationIdentity("TlabInfoEnd");
  49     public static final LocationIdentity TLABINFO_TOP_LOCATION = new NamedLocationIdentity("TlabInfoTop");
  50     public static final LocationIdentity TLABINFO_START_LOCATION = new NamedLocationIdentity("TlabInfoStart");
  51     public static final LocationIdentity TLABINFO_ALLOCINFO_LOCATION = new NamedLocationIdentity("TlabInfoAllocInfo");
  52     public static final LocationIdentity TLABINFO_ORIGINALTOP_LOCATION = new NamedLocationIdentity("TlabInfoOriginalTop");
  53     public static final LocationIdentity TLABINFO_DONORTHREAD_LOCATION = new NamedLocationIdentity("TlabInfoDonorThread");
  54 
  55     public static final LocationIdentity ALLOCINFO_TLABINFOSPOOLNEXT_LOCATION = new NamedLocationIdentity("AllocInfoTlabInfosPoolNext");
  56     public static final LocationIdentity ALLOCINFO_TLABINFOSPOOLEND_LOCATION = new NamedLocationIdentity("AllocInfoTlabInfosPoolEnd");
  57     public static final LocationIdentity ALLOCINFO_TLABALIGNRESERVEBYTES_LOCATION = new NamedLocationIdentity("AllocInfoTlabAlignreservebytes");
  58 
  59     /**
  60      * Gets the value of the thread register as a Word. There is a level of indirection here. Thread
  61      * register actually points to a holder for tlab info.
  62      */
  63     public static Word getTlabInfoPtr() {
  64         Word threadRegAsWord = registerAsWord(threadRegister(), true, false);
  65         return threadRegAsWord.readWord(0, TLAB_INFO_LOCATION);
  66     }
  67 
  68     public static Word getTlabInfoPtrLoadAcquire() {
  69         Word threadRegAsWord = registerAsWord(threadRegister(), true, false);
  70         return Word.unsigned(HSAILDirectLoadAcquireNode.loadAcquireLong(threadRegAsWord));
  71     }
  72 
  73     public static void writeTlabInfoPtrStoreRelease(Word val) {


 104     public static void writeTlabInfoTop(Word tlabInfo, Word val) {
 105         tlabInfo.writeWord(config().hsailTlabInfoTopOffset, val, TLABINFO_TOP_LOCATION);
 106     }
 107 
 108     public static void writeTlabInfoEnd(Word tlabInfo, Word val) {
 109         tlabInfo.writeWord(config().hsailTlabInfoEndOffset, val, TLABINFO_END_LOCATION);
 110     }
 111 
 112     public static Word readTlabInfoAllocInfo(Word tlabInfo) {
 113         return tlabInfo.readWord(config().hsailTlabInfoAllocInfoOffset, TLABINFO_ALLOCINFO_LOCATION);
 114     }
 115 
 116     public static void writeTlabInfoAllocInfo(Word tlabInfo, Word val) {
 117         tlabInfo.writeWord(config().hsailTlabInfoAllocInfoOffset, val, TLABINFO_ALLOCINFO_LOCATION);
 118     }
 119 
 120     public static void writeTlabInfoOriginalTop(Word tlabInfo, Word val) {
 121         tlabInfo.writeWord(config().hsailTlabInfoOriginalTopOffset, val, TLABINFO_ORIGINALTOP_LOCATION);
 122     }
 123 
 124     public static void writeTlabInfoDonorThread(Word tlabInfo, Word val) {
 125         tlabInfo.writeWord(config().hsailTlabInfoDonorThreadOffset, val, TLABINFO_DONORTHREAD_LOCATION);
 126     }
 127 
 128     public static Word readTlabInfoDonorThread(Word tlabInfo) {
 129         return tlabInfo.readWord(config().hsailTlabInfoDonorThreadOffset, TLABINFO_DONORTHREAD_LOCATION);
 130     }
 131 
 132     public static Word readAllocInfoTlabInfosPoolEnd(Word allocInfo) {
 133         return allocInfo.readWord(config().hsailAllocInfoTlabInfosPoolEndOffset, ALLOCINFO_TLABINFOSPOOLEND_LOCATION);
 134     }
 135 
 136     public static Word readAllocInfoTlabAlignReserveBytes(Word allocInfo) {
 137         return allocInfo.readWord(config().hsailAllocInfoTlabAlignReserveBytesOffset, ALLOCINFO_TLABALIGNRESERVEBYTES_LOCATION);
 138     }
 139 
 140     public static Word atomicGetAndAddAllocInfoTlabInfosPoolNext(Word allocInfo, int delta) {
 141         return Word.unsigned(AtomicReadAndAddNode.getAndAddLong(null, allocInfo.rawValue() + config().hsailAllocInfoTlabInfosPoolNextOffset, delta, ALLOCINFO_TLABINFOSPOOLNEXT_LOCATION));
 142     }
 143 
 144 }


  33 //JaCoCo Exclude
  34 
  35 /**
  36  * A collection of methods used in HSAIL-specific snippets and substitutions.
  37  */
  38 public class HSAILHotSpotReplacementsUtil extends HotSpotReplacementsUtil {
  39 
  40     private static HotSpotRegistersProvider hsailRegisters;
  41 
  42     public static void initialize(HotSpotRegistersProvider registers) {
  43         hsailRegisters = registers;
  44     }
  45 
  46     public static final LocationIdentity TLAB_INFO_LOCATION = new NamedLocationIdentity("TlabInfo");
  47     public static final LocationIdentity TLABINFO_LASTGOODTOP_LOCATION = new NamedLocationIdentity("TlabInfoLastGoodTop");
  48     public static final LocationIdentity TLABINFO_END_LOCATION = new NamedLocationIdentity("TlabInfoEnd");
  49     public static final LocationIdentity TLABINFO_TOP_LOCATION = new NamedLocationIdentity("TlabInfoTop");
  50     public static final LocationIdentity TLABINFO_START_LOCATION = new NamedLocationIdentity("TlabInfoStart");
  51     public static final LocationIdentity TLABINFO_ALLOCINFO_LOCATION = new NamedLocationIdentity("TlabInfoAllocInfo");
  52     public static final LocationIdentity TLABINFO_ORIGINALTOP_LOCATION = new NamedLocationIdentity("TlabInfoOriginalTop");
  53     public static final LocationIdentity TLABINFO_TLAB_LOCATION = new NamedLocationIdentity("TlabInfoTlab");
  54 
  55     public static final LocationIdentity ALLOCINFO_TLABINFOSPOOLNEXT_LOCATION = new NamedLocationIdentity("AllocInfoTlabInfosPoolNext");
  56     public static final LocationIdentity ALLOCINFO_TLABINFOSPOOLEND_LOCATION = new NamedLocationIdentity("AllocInfoTlabInfosPoolEnd");
  57     public static final LocationIdentity ALLOCINFO_TLABALIGNRESERVEBYTES_LOCATION = new NamedLocationIdentity("AllocInfoTlabAlignreservebytes");
  58 
  59     /**
  60      * Gets the value of the thread register as a Word. There is a level of indirection here. Thread
  61      * register actually points to a holder for tlab info.
  62      */
  63     public static Word getTlabInfoPtr() {
  64         Word threadRegAsWord = registerAsWord(threadRegister(), true, false);
  65         return threadRegAsWord.readWord(0, TLAB_INFO_LOCATION);
  66     }
  67 
  68     public static Word getTlabInfoPtrLoadAcquire() {
  69         Word threadRegAsWord = registerAsWord(threadRegister(), true, false);
  70         return Word.unsigned(HSAILDirectLoadAcquireNode.loadAcquireLong(threadRegAsWord));
  71     }
  72 
  73     public static void writeTlabInfoPtrStoreRelease(Word val) {


 104     public static void writeTlabInfoTop(Word tlabInfo, Word val) {
 105         tlabInfo.writeWord(config().hsailTlabInfoTopOffset, val, TLABINFO_TOP_LOCATION);
 106     }
 107 
 108     public static void writeTlabInfoEnd(Word tlabInfo, Word val) {
 109         tlabInfo.writeWord(config().hsailTlabInfoEndOffset, val, TLABINFO_END_LOCATION);
 110     }
 111 
 112     public static Word readTlabInfoAllocInfo(Word tlabInfo) {
 113         return tlabInfo.readWord(config().hsailTlabInfoAllocInfoOffset, TLABINFO_ALLOCINFO_LOCATION);
 114     }
 115 
 116     public static void writeTlabInfoAllocInfo(Word tlabInfo, Word val) {
 117         tlabInfo.writeWord(config().hsailTlabInfoAllocInfoOffset, val, TLABINFO_ALLOCINFO_LOCATION);
 118     }
 119 
 120     public static void writeTlabInfoOriginalTop(Word tlabInfo, Word val) {
 121         tlabInfo.writeWord(config().hsailTlabInfoOriginalTopOffset, val, TLABINFO_ORIGINALTOP_LOCATION);
 122     }
 123 
 124     public static void writeTlabInfoTlab(Word tlabInfo, Word val) {
 125         tlabInfo.writeWord(config().hsailTlabInfoTlabOffset, val, TLABINFO_TLAB_LOCATION);
 126     }
 127 
 128     public static Word readTlabInfoTlab(Word tlabInfo) {
 129         return tlabInfo.readWord(config().hsailTlabInfoTlabOffset, TLABINFO_TLAB_LOCATION);
 130     }
 131 
 132     public static Word readAllocInfoTlabInfosPoolEnd(Word allocInfo) {
 133         return allocInfo.readWord(config().hsailAllocInfoTlabInfosPoolEndOffset, ALLOCINFO_TLABINFOSPOOLEND_LOCATION);
 134     }
 135 
 136     public static Word readAllocInfoTlabAlignReserveBytes(Word allocInfo) {
 137         return allocInfo.readWord(config().hsailAllocInfoTlabAlignReserveBytesOffset, ALLOCINFO_TLABALIGNRESERVEBYTES_LOCATION);
 138     }
 139 
 140     public static Word atomicGetAndAddAllocInfoTlabInfosPoolNext(Word allocInfo, int delta) {
 141         return Word.unsigned(AtomicReadAndAddNode.getAndAddLong(null, allocInfo.rawValue() + config().hsailAllocInfoTlabInfosPoolNextOffset, delta, ALLOCINFO_TLABINFOSPOOLNEXT_LOCATION));
 142     }
 143 
 144 }