00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 # include "incls/_precompiled.incl"
00025
00026 # ifdef DELTA_COMPILER_unused
00027
00028 # include "incls/_registerMask.cpp.incl"
00029
00030 Location pick(RegisterMask& alloc, RegisterMask mask) {
00031 Unimplemented();
00032 unsigned r = mask & ~alloc;
00033 if (r == 0) return unAllocated;
00034 for (int reg = 0; ! isSet(r, 0); reg ++, r >>= 1) ;
00035 setNth(alloc, reg);
00036
00037 return Location();
00038 }
00039
00040 void printAllocated(RegisterMask rs) {
00041 Unimplemented();
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 }
00068
00069
00070 inline int tempToIndex(Location temp) { Unimplemented(); return 0;
00071
00072 }
00073
00074 inline Location indexToTemp(int temp) { Unimplemented(); return Location();
00075
00076 }
00077
00078 LongRegisterMask::LongRegisterMask() {
00079 bv = new BitVector(128);
00080 }
00081
00082 void LongRegisterMask::allocate(Location l) {
00083 if (l.isRegister()) {
00084 bv->add(l.number());
00085 } else {
00086 assert(l.isStackLocation(), "should be stack reg");
00087 int i = tempToIndex(l);
00088 if (i >= bv->length) grow();
00089 bv->add(i);
00090 }
00091 }
00092
00093 void LongRegisterMask::deallocate(Location l) {
00094 if (l.isRegister()) {
00095 bv->remove(l.number());
00096 } else {
00097 assert(l.isStackLocation(), "should be stack reg");
00098 int i = tempToIndex(l);
00099 bv->remove(i);
00100 }
00101 }
00102
00103 bool LongRegisterMask::isAllocated(Location l) {
00104 if (l.isRegister()) {
00105 return bv->includes(l.number());
00106 } else {
00107 assert(l.isStackLocation(), "should be stack reg");
00108 int i = tempToIndex(l);
00109 if (l.number() < bv->length) {
00110 return bv->includes(i);
00111 } else {
00112 return false;
00113 }
00114 }
00115 }
00116
00117 RegisterMask LongRegisterMask::regs() {
00118 return bv->bits[0];
00119 }
00120
00121 void LongRegisterMask::grow() {
00122 bv = bv->copy(bv->length * 2);
00123 }
00124
00125 void LongRegisterMask::print() {
00126 }
00127
00128
00129
00130 int findFirstUnused(LongRegisterMask** masks, int len,
00131 int start) {
00132
00133 BitVector* b = masks[0]->bv->copy(masks[0]->bv->maxLength);
00134 for (int i = 1; i < len; i++) {
00135 b->unionWith(masks[i]->bv);
00136 }
00137 for (i = start; i < b->length; i++) {
00138 if (!b->includes(i)) break;
00139 }
00140 return i;
00141 }
00142
00143 Location findFirstUnusedTemp(LongRegisterMask** masks, int len) {
00144 Unimplemented();
00145
00146
00147 return Location();
00148 }
00149
00150 # endif