1a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* 2a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * Copyright (C) 2009 The Android Open Source Project 3a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * 4a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * Licensed under the Apache License, Version 2.0 (the "License"); 5a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * you may not use this file except in compliance with the License. 6a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * You may obtain a copy of the License at 7a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * 8a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * http://www.apache.org/licenses/LICENSE-2.0 9a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * 10a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * Unless required by applicable law or agreed to in writing, software 11a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * distributed under the License is distributed on an "AS IS" BASIS, 12a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * See the License for the specific language governing permissions and 14a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * limitations under the License. 15a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham */ 16a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 17a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* 18a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * This file contains register alloction support and is intended to be 19a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * included by: 20a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * 21a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * Codegen-$(TARGET_ARCH_VARIANT).c 22a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * 23a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham */ 24a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 25a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham#include "compiler/CompilerUtility.h" 26a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham#include "compiler/CompilerIR.h" 27a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham#include "compiler/Dataflow.h" 28a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham#include "compiler/codegen/mips/MipsLIR.h" 29a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 30a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* 31a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * Return most flexible allowed register class based on size. 32a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * Bug: 2813841 33a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * Must use a core register for data types narrower than word (due 34a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * to possible unaligned load/store. 35a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham */ 36a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamstatic inline RegisterClass dvmCompilerRegClassBySize(OpSize size) 37a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham{ 38a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham return (size == kUnsignedHalf || 39a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham size == kSignedHalf || 40a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham size == kUnsignedByte || 41a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham size == kSignedByte ) ? kCoreReg : kAnyReg; 42a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham} 43a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 44a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamstatic inline int dvmCompilerS2VReg(CompilationUnit *cUnit, int sReg) 45a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham{ 46a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham assert(sReg != INVALID_SREG); 47a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham return DECODE_REG(dvmConvertSSARegToDalvik(cUnit, sReg)); 48a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham} 49a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 50a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* Reset the tracker to unknown state */ 51a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamstatic inline void dvmCompilerResetNullCheck(CompilationUnit *cUnit) 52a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham{ 53a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham dvmClearAllBits(cUnit->regPool->nullCheckedRegs); 54a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham} 55a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 56a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* 57a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * Get the "real" sreg number associated with an sReg slot. In general, 58a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * sReg values passed through codegen are the SSA names created by 59a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * dataflow analysis and refer to slot numbers in the cUnit->regLocation 60a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * array. However, renaming is accomplished by simply replacing RegLocation 61a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * entries in the cUnit->reglocation[] array. Therefore, when location 62a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * records for operands are first created, we need to ask the locRecord 63a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * identified by the dataflow pass what it's new name is. 64a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham */ 65a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 66a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamstatic inline int dvmCompilerSRegHi(int lowSreg) { 67a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham return (lowSreg == INVALID_SREG) ? INVALID_SREG : lowSreg + 1; 68a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham} 69a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 70a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 71a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamstatic inline bool dvmCompilerLiveOut(CompilationUnit *cUnit, int sReg) 72a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham{ 73a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham //TODO: fully implement 74a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham return true; 75a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham} 76a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 77a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamstatic inline int dvmCompilerSSASrc(MIR *mir, int num) 78a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham{ 79a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham assert(mir->ssaRep->numUses > num); 80a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham return mir->ssaRep->uses[num]; 81a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham} 82a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 83a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern RegLocation dvmCompilerEvalLoc(CompilationUnit *cUnit, RegLocation loc, 84a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham int regClass, bool update); 85a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* Mark a temp register as dead. Does not affect allocation state. */ 86a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerClobber(CompilationUnit *cUnit, int reg); 87a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 88a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern RegLocation dvmCompilerUpdateLoc(CompilationUnit *cUnit, 89a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham RegLocation loc); 90a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 91a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* see comments for updateLoc */ 92a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern RegLocation dvmCompilerUpdateLocWide(CompilationUnit *cUnit, 93a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham RegLocation loc); 94a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 95a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* Clobber all of the temps that might be used by a handler. */ 96a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerClobberHandlerRegs(CompilationUnit *cUnit); 97a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 98a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerMarkLive(CompilationUnit *cUnit, int reg, int sReg); 99a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 100a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerMarkDirty(CompilationUnit *cUnit, int reg); 101a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 102a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerMarkPair(CompilationUnit *cUnit, int lowReg, 103a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham int highReg); 104a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 105a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerMarkClean(CompilationUnit *cUnit, int reg); 106a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 107a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerResetDef(CompilationUnit *cUnit, int reg); 108a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 109a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerResetDefLoc(CompilationUnit *cUnit, RegLocation rl); 110a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 111a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* Set up temp & preserved register pools specialized by target */ 112a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerInitPool(RegisterInfo *regs, int *regNums, int num); 113a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 114a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* 115a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * Mark the beginning and end LIR of a def sequence. Note that 116a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * on entry start points to the LIR prior to the beginning of the 117a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * sequence. 118a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham */ 119a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerMarkDef(CompilationUnit *cUnit, RegLocation rl, 120a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham LIR *start, LIR *finish); 121a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* 122a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * Mark the beginning and end LIR of a def sequence. Note that 123a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * on entry start points to the LIR prior to the beginning of the 124a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * sequence. 125a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham */ 126a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerMarkDefWide(CompilationUnit *cUnit, RegLocation rl, 127a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham LIR *start, LIR *finish); 128a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 129a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern RegLocation dvmCompilerGetSrcWide(CompilationUnit *cUnit, MIR *mir, 130a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham int low, int high); 131a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 132a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern RegLocation dvmCompilerGetDestWide(CompilationUnit *cUnit, MIR *mir, 133a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham int low, int high); 134a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham// Get the LocRecord associated with an SSA name use. 135a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern RegLocation dvmCompilerGetSrc(CompilationUnit *cUnit, MIR *mir, int num); 136a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 137a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham// Get the LocRecord associated with an SSA name def. 138a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern RegLocation dvmCompilerGetDest(CompilationUnit *cUnit, MIR *mir, 139a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham int num); 140a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 141a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern RegLocation dvmCompilerGetReturnWide(CompilationUnit *cUnit); 142a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 143a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* Clobber all regs that might be used by an external C call */ 144a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerClobberCallRegs(CompilationUnit *cUnit); 145a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 146a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern RegisterInfo *dvmCompilerIsTemp(CompilationUnit *cUnit, int reg); 147a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 148a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerMarkInUse(CompilationUnit *cUnit, int reg); 149a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 150a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern int dvmCompilerAllocTemp(CompilationUnit *cUnit); 151a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 152a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern int dvmCompilerAllocTempFloat(CompilationUnit *cUnit); 153a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 154a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham//REDO: too many assumptions. 155a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern int dvmCompilerAllocTempDouble(CompilationUnit *cUnit); 156a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 157a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerFreeTemp(CompilationUnit *cUnit, int reg); 158a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 159a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerResetDefLocWide(CompilationUnit *cUnit, RegLocation rl); 160a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 161a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerResetDefTracking(CompilationUnit *cUnit); 162a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 163a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* Kill the corresponding bit in the null-checked register list */ 164a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerKillNullCheckedLoc(CompilationUnit *cUnit, 165a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham RegLocation loc); 166a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 167a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham//FIXME - this needs to also check the preserved pool. 168a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern RegisterInfo *dvmCompilerIsLive(CompilationUnit *cUnit, int reg); 169a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 170a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* To be used when explicitly managing register use */ 171a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerLockAllTemps(CompilationUnit *cUnit); 172a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 173a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerFlushAllRegs(CompilationUnit *cUnit); 174a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 175a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern RegLocation dvmCompilerGetReturnWideAlt(CompilationUnit *cUnit); 176a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 177a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern RegLocation dvmCompilerGetReturn(CompilationUnit *cUnit); 178a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 179a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern RegLocation dvmCompilerGetReturnAlt(CompilationUnit *cUnit); 180a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 181a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* Clobber any temp associated with an sReg. Could be in either class */ 182a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerClobberSReg(CompilationUnit *cUnit, int sReg); 183a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 184a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* Return a temp if one is available, -1 otherwise */ 185a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern int dvmCompilerAllocFreeTemp(CompilationUnit *cUnit); 186a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 187a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* 188a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * Similar to dvmCompilerAllocTemp(), but forces the allocation of a specific 189a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * register. No check is made to see if the register was previously 190a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * allocated. Use with caution. 191a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham */ 192a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerLockTemp(CompilationUnit *cUnit, int reg); 193a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 194a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern RegLocation dvmCompilerWideToNarrow(CompilationUnit *cUnit, 195a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham RegLocation rl); 196a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 197a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham/* 198a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * Free all allocated temps in the temp pools. Note that this does 199a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * not affect the "liveness" of a temp register, which will stay 200a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * live until it is either explicitly killed or reallocated. 201a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham */ 202a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerResetRegPool(CompilationUnit *cUnit); 203a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 204a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerClobberAllRegs(CompilationUnit *cUnit); 205a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham 206a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandhamextern void dvmCompilerResetDefTracking(CompilationUnit *cUnit); 207