001 /*
002 * This file is part of the Jikes RVM project (http://jikesrvm.org).
003 *
004 * This file is licensed to You under the Eclipse Public License (EPL);
005 * You may not use this file except in compliance with the License. You
006 * may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/eclipse-1.0.php
009 *
010 * See the COPYRIGHT.txt file distributed with this work for information
011 * regarding copyright ownership.
012 */
013 package org.jikesrvm.compilers.baseline;
014
015 import org.jikesrvm.VM;
016 import org.vmmagic.pragma.Uninterruptible;
017
018 /**
019 * Unusual maps are maps to track references that don't take the usual format.
020 * Currently unusual maps include:
021 * maps of locations within JSR subroutines (includes return address map)
022 * In the future the return address maps may be expanded to include other
023 * internal pointers or internal/external pointers may be handled separately.
024 */
025 @Uninterruptible
026 final class UnusualMaps {
027
028 /** For maps of JSR subroutine locations index into the normal reference map of where the return address can be located */
029 int returnAddressIndex;
030 /** index into the map table of the references set map */
031 int referenceMapIndex;
032 /** index into the map table of the non-reference set map */
033 int nonReferenceMapIndex;
034 /** index into the map table of the return address map */
035 int returnAddressMapIndex;
036 /** index into the array of normal maps ie the back-pointer */
037 int normalMapIndex;
038
039 /** set the index in the stack frame of the return address for this map */
040 void setReturnAddressIndex(int index) {
041 returnAddressIndex = index;
042 }
043
044 /** provide the index in the stack frame of the return address for this map */
045 int getReturnAddressIndex() {
046 return returnAddressIndex;
047 }
048
049 /** set the offset of the reference map in the stackmap list of maps */
050 void setReferenceMapIndex(int index) {
051 referenceMapIndex = index;
052 }
053
054 /** provide the index in the stackmaps for the reference map */
055 int getReferenceMapIndex() {
056 return referenceMapIndex;
057 }
058
059 /** set the offset of the non-reference map in the stackmap list of maps */
060 void setNonReferenceMapIndex(int index) {
061 nonReferenceMapIndex = index;
062 }
063
064 /** provide the index in the stackmaps for the non-reference map */
065 int getNonReferenceMapIndex() {
066 return nonReferenceMapIndex;
067 }
068
069 /** set the offset of the returnAddress map in the stackmap list of maps */
070 void setReturnAddressMapIndex(int index) {
071 returnAddressMapIndex = index;
072 }
073
074 /** provide the index in the stackmaps for the return Address map */
075 int getReturnAddressMapIndex() {
076 return returnAddressMapIndex;
077 }
078
079 /** provide the normal map index ie the back-pointer */
080 int getNormalMapIndex() {
081 return normalMapIndex;
082 }
083
084 /** set the normal map index ie the back-pointer */
085 void setNormalMapIndex(int index) {
086 normalMapIndex = index;
087 }
088
089 public void showInfo() {
090 VM.sysWrite(" UnusualMap showInfo- ");
091
092 VM.sysWrite(" return address index = ");
093 VM.sysWrite(returnAddressIndex);
094 VM.sysWrite("\n referenceMapIndex = ");
095 VM.sysWrite(referenceMapIndex);
096 VM.sysWrite("\n nonReferenceMapIndex = ");
097 VM.sysWrite(nonReferenceMapIndex);
098 VM.sysWrite("\n returnAddressMapIndex = ");
099 VM.sysWrite(returnAddressMapIndex);
100 VM.sysWrite("\n");
101 }
102 }