 		}
 		
 		
-		
+		protected var DEBUG_PRINTOUT:String;
 		protected function log(...args):void {
 			if (DEBUG.PRINT_TESTS)
 				C.log(args);
+			else {
+				if (!DEBUG_PRINTOUT)
+					DEBUG_PRINTOUT = '';
+				DEBUG_PRINTOUT += args.join(", ") + "\n";
+			}
 		}
 		
 		

					throw new Error("!");
			} else if (abstraction.value != value.value)
				throw new Error("!!!");
			
			for each (var arg:AbstractArg in abstraction.getAbstractArgs())
				if (!arg.immediate && !AbstractArg.argInVec(arg, values)) {
					values.push(arg);
					if (arg.inStack)
						sidestack.push(arg);
				}
			
			return abstraction;
		}

				} else {
					var abstraction:InstructionAbstraction = genAbstraction(value, values, sidestack, instructionTypes);
					
					var oldValues:Vector.<AbstractArg> = values.slice();
					var oldStack:Vector.<AbstractArg> = sidestack.slice();
					for each (var arg:AbstractArg in abstraction.getAbstractArgs())
						if (!arg.immediate && !AbstractArg.argInVec(arg, values)) {
							values.push(arg);
							if (arg.inStack)
								sidestack.push(arg);
						}
					
					if (AbstractArg.instructionsToSet(values) > NUM_REGISTERS) {
						values = oldValues;
						sidestack = oldStack;
						values.push(value);
						log("Early termination due to register overflow");
						break;
					}
					
					
					if (abstraction.writesToMemory)
						saveTargets.push(new AbstractArg(abstraction.memoryValue, abstraction.memoryAddress));
