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