if we hit RET w/ empty call stack, halt
authorBrian <brian.paul@tungstengraphics.com>
Fri, 26 Oct 2007 18:24:28 +0000 (12:24 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Fri, 26 Oct 2007 19:10:37 +0000 (13:10 -0600)
src/mesa/pipe/tgsi/exec/tgsi_exec.c

index 42aed9bd6b1e46da78493371af4a0535480d8b00..0125f40dd227422d3499f9cdfcdedf15986ae603 100644 (file)
@@ -2082,6 +2082,13 @@ exec_instruction(
       if (mach->ExecMask == 0x0) {
          /* really return now (otherwise, keep executing */
 
+         if (mach->CallStackTop == 0) {
+            /* returning from main() */
+            *pc = -1;
+            return;
+         }
+         *pc = mach->CallStack[--mach->CallStackTop];
+
          /* pop the Cond, Loop, Cont stacks */
          assert(mach->CondStackTop > 0);
          mach->CondMask = mach->CondStack[--mach->CondStackTop];
@@ -2089,16 +2096,9 @@ exec_instruction(
          mach->LoopMask = mach->LoopStack[--mach->LoopStackTop];
          assert(mach->ContStackTop > 0);
          mach->ContMask = mach->ContStack[--mach->ContStackTop];
-
          assert(mach->FuncStackTop > 0);
          mach->FuncMask = mach->FuncStack[--mach->FuncStackTop];
 
-         assert(mach->CallStackTop >= 0);
-         if (mach->CallStackTop == 0) {
-            /* XXX error? */
-            return;
-         }
-         *pc = mach->CallStack[--mach->CallStackTop];
          UPDATE_EXEC_MASK(mach);
       }
       break;