Home | History | Annotate | Download | only in mips

Lines Matching full:cunit

29 static MipsLIR *loadWordDisp(CompilationUnit *cUnit, int rBase, int displacement,
32 return loadBaseDisp(cUnit, NULL, rBase, displacement, rDest, kWord,
36 static MipsLIR *storeWordDisp(CompilationUnit *cUnit, int rBase,
39 return storeBaseDisp(cUnit, rBase, displacement, rSrc, kWord);
47 static void loadValueDirect(CompilationUnit *cUnit, RegLocation rlSrc,
50 rlSrc = dvmCompilerUpdateLoc(cUnit, rlSrc);
52 genRegCopy(cUnit, reg1, rlSrc.lowReg);
54 loadWordDisp(cUnit, rSELF, offsetof(Thread, interpSave.retval), reg1);
57 loadWordDisp(cUnit, rFP, dvmCompilerS2VReg(cUnit, rlSrc.sRegLow) << 2,
67 static void loadValueDirectFixed(CompilationUnit *cUnit, RegLocation rlSrc,
70 dvmCompilerClobber(cUnit, reg1);
71 dvmCompilerMarkInUse(cUnit, reg1);
72 loadValueDirect(cUnit, rlSrc, reg1);
80 static void loadValueDirectWide(CompilationUnit *cUnit, RegLocation rlSrc,
83 rlSrc = dvmCompilerUpdateLocWide(cUnit, rlSrc);
85 genRegCopyWide(cUnit, regLo, regHi, rlSrc.lowReg, rlSrc.highReg);
87 loadBaseDispWide(cUnit, NULL, rSELF, offsetof(Thread, interpSave.retval),
91 loadBaseDispWide(cUnit, NULL, rFP,
92 dvmCompilerS2VReg(cUnit, rlSrc.sRegLow) << 2,
102 static void loadValueDirectWideFixed(CompilationUnit *cUnit, RegLocation rlSrc,
105 dvmCompilerClobber(cUnit, regLo);
106 dvmCompilerClobber(cUnit, regHi);
107 dvmCompilerMarkInUse(cUnit, regLo);
108 dvmCompilerMarkInUse(cUnit, regHi);
109 loadValueDirectWide(cUnit, rlSrc, regLo, regHi);
112 static RegLocation loadValue(CompilationUnit *cUnit, RegLocation rlSrc,
115 rlSrc = dvmCompilerEvalLoc(cUnit, rlSrc, opKind, false);
117 loadValueDirect(cUnit, rlSrc, rlSrc.lowReg);
119 dvmCompilerMarkLive(cUnit, rlSrc.lowReg, rlSrc.sRegLow);
121 loadWordDisp(cUnit, rSELF, offsetof(Thread, interpSave.retval), rlSrc.lowReg);
123 dvmCompilerClobber(cUnit, rlSrc.lowReg);
128 static void storeValue(CompilationUnit *cUnit, RegLocation rlDest,
135 dvmCompilerKillNullCheckedLoc(cUnit, rlDest);
136 rlSrc = dvmCompilerUpdateLoc(cUnit, rlSrc);
137 rlDest = dvmCompilerUpdateLoc(cUnit, rlDest);
139 if (dvmCompilerIsLive(cUnit, rlSrc.lowReg) ||
142 rlDest = dvmCompilerEvalLoc(cUnit, rlDest, kAnyReg, false);
143 genRegCopy(cUnit, rlDest.lowReg, rlSrc.lowReg);
147 dvmCompilerClobber(cUnit, rlSrc.lowReg);
151 rlDest = dvmCompilerEvalLoc(cUnit, rlDest, kAnyReg, false);
152 loadValueDirect(cUnit, rlSrc, rlDest.lowReg);
156 dvmCompilerMarkLive(cUnit, rlDest.lowReg, rlDest.sRegLow);
157 dvmCompilerMarkDirty(cUnit, rlDest.lowReg);
161 storeBaseDisp(cUnit, rSELF, offsetof(Thread, interpSave.retval),
163 dvmCompilerClobber(cUnit, rlDest.lowReg);
165 dvmCompilerResetDefLoc(cUnit, rlDest);
166 if (dvmCompilerLiveOut(cUnit, rlDest.sRegLow)) {
167 defStart = (LIR *)cUnit->lastLIRInsn;
168 int vReg = dvmCompilerS2VReg(cUnit, rlDest.sRegLow);
169 storeBaseDisp(cUnit, rFP, vReg << 2, rlDest.lowReg, kWord);
170 dvmCompilerMarkClean(cUnit, rlDest.lowReg);
171 defEnd = (LIR *)cUnit->lastLIRInsn;
172 dvmCompilerMarkDef(cUnit, rlDest, defStart, defEnd);
177 static RegLocation loadValueWide(CompilationUnit *cUnit, RegLocation rlSrc,
181 rlSrc = dvmCompilerEvalLoc(cUnit, rlSrc, opKind, false);
183 loadValueDirectWide(cUnit, rlSrc, rlSrc.lowReg, rlSrc.highReg);
185 dvmCompilerMarkLive(cUnit, rlSrc.lowReg, rlSrc.sRegLow);
186 dvmCompilerMarkLive(cUnit, rlSrc.highReg,
189 loadBaseDispWide(cUnit, NULL, rSELF, offsetof(Thread, interpSave.retval),
192 dvmCompilerClobber(cUnit, rlSrc.lowReg);
193 dvmCompilerClobber(cUnit, rlSrc.highReg);
198 static void storeValueWide(CompilationUnit *cUnit, RegLocation rlDest,
206 dvmCompilerKillNullCheckedLoc(cUnit, rlDest);
208 if (dvmCompilerIsLive(cUnit, rlSrc.lowReg) ||
209 dvmCompilerIsLive(cUnit, rlSrc.highReg) ||
212 rlDest = dvmCompilerEvalLoc(cUnit, rlDest, kAnyReg, false);
213 genRegCopyWide(cUnit, rlDest.lowReg, rlDest.highReg,
219 dvmCompilerClobber(cUnit, rlSrc.lowReg);
220 dvmCompilerClobber(cUnit, rlSrc.highReg);
224 rlDest = dvmCompilerEvalLoc(cUnit, rlDest, kAnyReg, false);
225 loadValueDirectWide(cUnit, rlSrc, rlDest.lowReg,
230 dvmCompilerMarkLive(cUnit, rlDest.lowReg, rlDest.sRegLow);
231 dvmCompilerMarkLive(cUnit, rlDest.highReg,
233 dvmCompilerMarkDirty(cUnit, rlDest.lowReg);
234 dvmCompilerMarkDirty(cUnit, rlDest.highReg);
235 dvmCompilerMarkPair(cUnit, rlDest.lowReg, rlDest.highReg);
239 storeBaseDispWide(cUnit, rSELF, offsetof(Thread, interpSave.retval),
241 dvmCompilerClobber(cUnit, rlDest.lowReg);
242 dvmCompilerClobber(cUnit, rlDest.highReg);
244 dvmCompilerResetDefLocWide(cUnit, rlDest);
245 if (dvmCompilerLiveOut(cUnit, rlDest.sRegLow) ||
246 dvmCompilerLiveOut(cUnit, dvmCompilerSRegHi(rlDest.sRegLow))) {
247 defStart = (LIR *)cUnit->lastLIRInsn;
248 int vReg = dvmCompilerS2VReg(cUnit, rlDest.sRegLow);
249 assert((vReg+1) == dvmCompilerS2VReg(cUnit,
251 storeBaseDispWide(cUnit, rFP, vReg << 2, rlDest.lowReg,
253 dvmCompilerMarkClean(cUnit, rlDest.lowReg);
254 dvmCompilerMarkClean(cUnit, rlDest.highReg);
255 defEnd = (LIR *)cUnit->lastLIRInsn;
256 dvmCompilerMarkDefWide(cUnit, rlDest, defStart, defEnd);
265 static MipsLIR *genNullCheck(CompilationUnit *cUnit, int sReg, int mReg,
269 if (dvmIsBitSet(cUnit->regPool->nullCheckedRegs, sReg)) {
272 dvmSetBit(cUnit->regPool->nullCheckedRegs, sReg);
273 return genRegImmCheck(cUnit, kMipsCondEq, mReg, 0, dOffset, pcrLabel);
282 static MipsLIR *genRegRegCheck(CompilationUnit *cUnit,
289 int tReg = dvmCompilerAllocTemp(cUnit);
290 res = newLIR3(cUnit, kMipsSlt, tReg, reg1, reg2);
291 MipsLIR *branch = opCompareBranch(cUnit, kMipsBeqz, tReg, -1);
292 genCheckCommon(cUnit, dOffset, branch, pcrLabel);
294 int tReg = dvmCompilerAllocTemp(cUnit);
295 res = newLIR3(cUnit, kMipsSltu, tReg, reg1, reg2);
296 MipsLIR *branch = opCompareBranch(cUnit, kMipsBeqz, tReg, -1);
297 genCheckCommon(cUnit, dOffset, branch, pcrLabel);
309 static MipsLIR *genZeroCheck(CompilationUnit *cUnit, int mReg,
312 return genRegImmCheck(cUnit, kMipsCondEq, mReg, 0, dOffset, pcrLabel);
316 static MipsLIR *genBoundsCheck(CompilationUnit *cUnit, int rIndex,
319 return genRegRegCheck(cUnit, kMipsCondCs, rIndex, rBound, dOffset,
327 static void genDispatchToHandler(CompilationUnit *cUnit, TemplateOpcode opCode)
339 dvmCompilerClobberHandlerRegs(cUnit);
344 newLIR1(cUnit, kMipsJal, targetAddr);
346 loadConstant(cUnit, r_T9, targetAddr);
347 newLIR2(cUnit, kMipsJalr, r_RA, r_T9);