OSDN Git Service

Fix for 2892472 jit spew: No free temp registers
authorbuzbee <buzbee@google.com>
Wed, 4 Aug 2010 17:13:15 +0000 (10:13 -0700)
committerbuzbee <buzbee@google.com>
Wed, 4 Aug 2010 17:13:15 +0000 (10:13 -0700)
Neglected some register allocation hygene, which caused a
problem on armv5te builds.

Change-Id: I666b39b88822c4d3d3d7f0e84386aca2920bb9f1

vm/compiler/codegen/arm/CodegenDriver.c

index cd0f18d..79019a0 100644 (file)
@@ -41,6 +41,8 @@ static void markCard(CompilationUnit *cUnit, int valReg, int tgtAddrReg)
     ArmLIR *target = newLIR0(cUnit, kArmPseudoTargetLabel);
     target->defMask = ENCODE_ALL;
     branchOver->generic.target = (LIR *)target;
+    dvmCompilerFreeTemp(cUnit, regCardBase);
+    dvmCompilerFreeTemp(cUnit, regCardNo);
 }
 
 static bool genConversionCall(CompilationUnit *cUnit, MIR *mir, void *funct,
@@ -574,6 +576,9 @@ static void genArrayObjectPut(CompilationUnit *cUnit, MIR *mir,
                      scale, kWord);
     HEAP_ACCESS_SHADOW(false);
 
+    dvmCompilerFreeTemp(cUnit, regPtr);
+    dvmCompilerFreeTemp(cUnit, regIndex);
+
     /* NOTE: marking card here based on object head */
     markCard(cUnit, r0, r1);
 }
@@ -1543,6 +1548,7 @@ static bool handleFmt21c_Fmt31c(CompilationUnit *cUnit, MIR *mir)
                 /* NOTE: marking card based on field address */
                 markCard(cUnit, rlSrc.lowReg, tReg);
             }
+            dvmCompilerFreeTemp(cUnit, tReg);
 
             break;
         }