2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								/*************************************************************************
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* 									 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* 	 Extension  for  YAP  Prolog  					 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* 									 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*  Copyright  G . S . Oliveira ,  A . F . Silva  and  Universidade  Estadual  de  Maringá  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* 									 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* 	Yap  Prolog  was  developed  at  NCCUP  -  Universidade  do  Porto 	 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*  Copyright  L . Damas ,  V . S . Costa  and  Universidade  do  Porto  1985 - 1997 	 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* 									 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* 									 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*  File : 		jit_configpreds . c 					 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*  comments : 	JIT  Compiler  Configuration  predicates 			 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* 									 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*  Last  rev :      2013 - 10 - 18                                		 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "jit_predicates.hh" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  <math.h> 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Enable any (passed by argument) execution mode
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  Int   p_execution_mode ( void ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Enable 'just interpreted' mode.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  Int   p_interpreted_mode ( void ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Enable 'smart jit' mode.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  Int   p_smartjit_mode ( void ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Enable 'continuous compilation' mode.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  Int   p_continuouscompilation_mode ( void ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Enable 'just compiled' mode.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  Int   p_justcompiled_mode ( void ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Enable one (passed by argument) of all available frequency types: counter or time. Frequency bound is default.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Just for 'smart jit' or 'continuous compilation' mode
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  Int   p_frequencyty1 ( void ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Enable one (1st argument) of all available frequency types: counter and time. Frequency bound is 2nd argument
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Just for 'smart jit' or 'continuous compilation' mode
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  Int   p_frequencyty2 ( void ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Enable frequency bound
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Just for 'smart jit' or 'continuous compilation' mode
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  Int   p_frequency_bound ( void ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Enable value for starting profiling
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Just for 'smart jit' or 'continuous compilation' mode
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  Int   p_profiling_start_point ( void ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Choose type of clause that can be main on traces
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Just for 'smart jit' or 'continuous compilation' mode
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  Int   p_main_clause_ty ( void ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Choose amount of compilation threads
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Just for 'smart jit' or 'continuous compilation' mode
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  Int   p_compilation_threads ( void ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Enable recompilation
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Just for 'smart jit' or 'continuous compilation' mode
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  Int   p_enable_recompilation ( void ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Disable recompilation
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Just for 'smart jit' or 'continuous compilation' mode
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  Int   p_disable_recompilation ( void ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Just code interpretation. Don't compile
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Just for 'smart jit' or 'continuous compilation' mode
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  Int   p_only_profiled_interpreter ( void ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Disable 'p_only_profiled_interpreter'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Just for 'smart jit' or 'continuous compilation' mode
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  Int   p_noonly_profiled_interpreter ( void ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# pragma GCC diagnostic push 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# pragma GCC diagnostic ignored "-Wimplicit-function-declaration" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  Int 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								p_execution_mode ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  enumExecModes  mode ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  // valid values for ARG1 are 'integer' and 'atom'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Term  t  =  Deref ( ARG1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  if  ( IsIntTerm ( t ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // ARG1 is integer
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Int  v  =  IntOfTerm ( t ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( v  <  0  | |  v  >  3 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // value passed by argument is out of known range (valid values are: 0 -- interpreted; 1 -- smart jit; 2 -- continuous compilation; 3 -- just compiled)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      Yap_Error ( OUT_OF_KNOWNRANGE_ERROR , t , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // storing mode
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    mode  =  ( enumExecModes ) v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  else  if  ( IsAtomTerm ( t ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // ARG1 is atom
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  i  =  0 ,  j  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    char  * tmp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // gets string from atom and stores it on 'str'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    char  * str  =  ( char * ) malloc ( YAP_AtomNameLength ( AtomOfTerm ( t ) ) * sizeof ( char ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    strcpy ( str ,  AtomName ( AtomOfTerm ( t ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // Makes upper characters of 'str' (for comparison)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    UPPER_ENTRY ( str ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // Detecting mode according to 'str'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( strcmp ( str ,  " INTERPRETED " )  = =  0 )  mode  =  JUST_INTERPRETED ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else  if  ( strcmp ( str ,  " SMARTJIT " )  = =  0 )  mode  =  SMART_JIT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else  if  ( strcmp ( str ,  " CONTINUOUSCOMPILATION " )  = =  0 )  mode  =  CONTINUOUS_COMPILATION ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else  if  ( strcmp ( str ,  " JUSTCOMPILED " )  = =  0 )  mode  =  JUST_COMPILED ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // value passed by argument is out of known range
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      Yap_Error ( OUT_OF_KNOWNRANGE_ERROR , t , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // ARG1 is not an integer or atom
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Yap_NilError ( INVALID_PARAMETER_TYPE_ERROR , " Execution mode " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  // setting execution mode
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  ExpEnv . config_struc . execution_mode  =  mode ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								  /* setting execution mode parameters */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  switch  ( mode )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  case  JUST_INTERPRETED : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( Yap_ExecutionMode  = =  INTERPRETED )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // execution mode only can be 'JUST_INTERPRETED' if 'Yap_ExecutionMode == INTERPRETED' (passing -J0 on command line)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // 'JUST_INTERPRETED' does not use these parameters
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . frequency_type  =  NO_FREQ ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . frequency_bound  =  0.0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . profiling_startp  =  0.0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . mainclause_ty  =  UNUSED ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . compilation_threads  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if YAP_DBG_PREDS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( ExpEnv . debug_struc . act_predicate_msgs . success_msgs ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          fprintf ( stderr , "       YAP Execution mode changed to INTERPRETED!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // 'Yap_ExecutionMode' is not compatible
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Yap_NilError ( INCOMPATIBLE_CODEMODE_WARNING , " INTERPRETED " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  case  SMART_JIT : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( Yap_ExecutionMode  = =  MIXED_MODE )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // execution mode only can be 'SMART_JIT' if 'Yap_ExecutionMode == MIXED_MODE' (passing -J1 on command line)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . frequency_type  =  COUNTER ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . frequency_bound  =  1024.0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . profiling_startp  =  0.72 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . mainclause_ty  =  HOT_AND_CALLEE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         ExpEnv . config_struc . compilation_threads  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if YAP_DBG_PREDS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( ExpEnv . debug_struc . act_predicate_msgs . success_msgs ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          fprintf ( stderr , "       YAP Execution mode changed to SMART JIT!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // 'Yap_ExecutionMode' is not compatible
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Yap_NilError ( INCOMPATIBLE_CODEMODE_WARNING , " SMART JIT " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  case  CONTINUOUS_COMPILATION : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( Yap_ExecutionMode  = =  MIXED_MODE )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // execution mode only can be 'CONTINUOUS_COMPILATION' if 'Yap_ExecutionMode == MIXED_MODE' (passing -J1 on command line)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . frequency_type  =  COUNTER ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . frequency_bound  =  1024.0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . profiling_startp  =  0.72 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . mainclause_ty  =  HOT_AND_CALLEE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . compilation_threads  =  ExpEnv . config_struc . ncores - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if YAP_DBG_PREDS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( ExpEnv . debug_struc . act_predicate_msgs . success_msgs ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          fprintf ( stderr , "       YAP Execution mode changed to CONTINUOUS COMPILATION!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // 'Yap_ExecutionMode' is not compatible
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Yap_NilError ( INCOMPATIBLE_CODEMODE_WARNING , " CONTINUOUS COMPILATION " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  case  JUST_COMPILED : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( Yap_ExecutionMode  = =  COMPILED )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // execution mode only can be 'JUST_COMPILED' if 'Yap_ExecutionMode == COMPILED' (passing -J2 on command line)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // 'JUST_COMPILED' does not use these parameters
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . frequency_type  =  NO_FREQ ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . frequency_bound  =  0.0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . profiling_startp  =  0.0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . mainclause_ty  =  UNUSED ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . compilation_threads  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if YAP_DBG_PREDS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( ExpEnv . debug_struc . act_predicate_msgs . success_msgs ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          fprintf ( stderr , "       YAP Execution mode changed to JUST COMPILED!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // 'Yap_ExecutionMode' is not compatible
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Yap_NilError ( INCOMPATIBLE_CODEMODE_WARNING , " JUST COMPILED " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /***/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  Int 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								p_interpreted_mode ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  // Same as 'execution_mode(0)' or 'execution_mode(interpreted)'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  if  ( Yap_ExecutionMode  = =  INTERPRETED )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // execution mode only can be 'JUST_INTERPRETED' if 'Yap_ExecutionMode == INTERPRETED' (passing -J0 on command line)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . execution_mode  =  JUST_INTERPRETED ;  // setting mode
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . frequency_type  =  NO_FREQ ;  // does not use frequency type
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . frequency_bound  =  0.0 ;   // does not use frequency bound
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . profiling_startp  =  0.0 ;  // does not use profiling startp
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . mainclause_ty  =  UNUSED ;  // does not use mainclause ty
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . compilation_threads  =  0 ;  // does not use compilation threads
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if YAP_DBG_PREDS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( ExpEnv . debug_struc . act_predicate_msgs . success_msgs ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      fprintf ( stderr , "       YAP Execution mode changed to INTERPRETED!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // 'Yap_ExecutionMode' is not compatible
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Yap_NilError ( INCOMPATIBLE_CODEMODE_WARNING , " INTERPRETED " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  Int 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								p_smartjit_mode ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  // Same as 'execution_mode(1)' or 'execution_mode(smartjit)'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  if  ( Yap_ExecutionMode  = =  MIXED_MODE )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // execution mode only can be 'SMART_JIT' if 'Yap_ExecutionMode == MIXED_MODE' (passing -J1 on command line)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . execution_mode  =  SMART_JIT ;  // setting mode
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . frequency_type  =  COUNTER ;  // default value
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . frequency_bound  =  1024.0 ;  // default value
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . profiling_startp  =  0.72 ;  // default value
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . mainclause_ty  =  HOT_AND_CALLEE ;  // default value
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    /* does not use compilation threads */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . compilation_threads  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . threaded_compiler_threads  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . posthreads  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    /***/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if YAP_DBG_PREDS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( ExpEnv . debug_struc . act_predicate_msgs . success_msgs ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      fprintf ( stderr , "       YAP Execution mode changed to SMART JIT!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( ExpEnv . debug_struc . pprint_intermediate . print_to_file ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      strcpy ( ( ( char * ) ExpEnv . debug_struc . pprint_intermediate . file_name ) ,  " trace " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // 'Yap_ExecutionMode' is not compatible
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Yap_NilError ( INCOMPATIBLE_CODEMODE_WARNING , " SMART JIT " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  Int 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								p_continuouscompilation_mode ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  // Same as 'execution_mode(2)' or 'execution_mode(continuouscompilation)'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  if  ( Yap_ExecutionMode  = =  MIXED_MODE )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // execution mode only can be 'CONTINUOUS_COMPILATION' if 'Yap_ExecutionMode == MIXED_MODE' (passing -J1 on command line)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . execution_mode  =  CONTINUOUS_COMPILATION ;  // setting mode
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . frequency_type  =  COUNTER ;  // default value
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . frequency_bound  =  1024.0 ;  // default value
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . profiling_startp  =  0.72 ;  // default value
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . mainclause_ty  =  HOT_AND_CALLEE ;  // default value
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . compilation_threads  =  ExpEnv . config_struc . ncores - 1 ;  // default value for this mode
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    /* initializing structures which will handle compilation threads */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( ExpEnv . config_struc . threaded_compiler_threads )  free ( ExpEnv . config_struc . threaded_compiler_threads ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( ExpEnv . config_struc . posthreads )  free ( ExpEnv . config_struc . posthreads ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      ExpEnv . config_struc . threaded_compiler_threads  =  ( pthread_t * ) malloc ( ExpEnv . config_struc . compilation_threads * sizeof ( pthread_t ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      ExpEnv . config_struc . posthreads  =  ( CELL * ) malloc ( ExpEnv . config_struc . compilation_threads * sizeof ( CELL ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      int  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      for  ( i  =  0 ;  i  <  ExpEnv . config_struc . compilation_threads ;  i + + )  ExpEnv . config_struc . posthreads [ i ]  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    /***/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if YAP_DBG_PREDS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( ExpEnv . debug_struc . act_predicate_msgs . success_msgs ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      fprintf ( stderr , "       YAP Execution mode changed to CONTINUOUS COMPILATION!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( ExpEnv . debug_struc . pprint_intermediate . print_to_file ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      strcpy ( ( ( char * ) ExpEnv . debug_struc . pprint_intermediate . file_name ) ,  " trace " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // 'Yap_ExecutionMode' is not compatible
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Yap_NilError ( INCOMPATIBLE_CODEMODE_WARNING , " CONTINUOUS COMPILATION " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  Int 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								p_justcompiled_mode ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  // Same as 'execution_mode(3)' or 'execution_mode(justcompiled)'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  if  ( Yap_ExecutionMode  = =  COMPILED )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // execution mode only can be 'JUST_COMPILED' if 'Yap_ExecutionMode == COMPILED' (passing -J2 on command line)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . execution_mode  =  JUST_COMPILED ;  // setting mode
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . frequency_type  =  NO_FREQ ;  // does not use frequency type
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . frequency_bound  =  0.0 ;  // does not use frequency bound
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . profiling_startp  =  0.0 ;  // does not use profiling startp
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . mainclause_ty  =  UNUSED ;  // does not use mainclause ty
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ExpEnv . config_struc . compilation_threads  =  0 ;  // does not use compilation threads
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if YAP_DBG_PREDS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( ExpEnv . debug_struc . act_predicate_msgs . success_msgs ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      fprintf ( stderr , "       YAP Execution mode changed to JUST COMPILED!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( ExpEnv . debug_struc . pprint_intermediate . print_to_file ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      strcpy ( ( ( char * ) ExpEnv . debug_struc . pprint_intermediate . file_name ) ,  " clause " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // 'Yap_ExecutionMode' is not compatible
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Yap_NilError ( INCOMPATIBLE_CODEMODE_WARNING , " JUST COMPILED " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  Int 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								p_frequencyty1 ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  // this predicate works only 'SMART_JIT' and 'CONTINUOUS_COMPILATION' modes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  if  ( ExpEnv . config_struc . execution_mode  = =  SMART_JIT  | |  ExpEnv . config_struc . execution_mode  = =  CONTINUOUS_COMPILATION )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Term  t  =  Deref ( ARG1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // valid value for ARG1 is just 'atom'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( IsAtomTerm ( t ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // ARG1 is atom
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      int  i  =  0 ,  j  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      char  * tmp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // gets string from atom and stores it on 'str'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      char  * str  =  ( char * ) malloc ( YAP_AtomNameLength ( AtomOfTerm ( t ) ) * sizeof ( char ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      strcpy ( str ,  AtomName ( AtomOfTerm ( t ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // Makes upper characters of 'str' (for comparison)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      UPPER_ENTRY ( str ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // Detectng frequency type according to 'str'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( strcmp ( str ,  " COUNTER " )  = =  0  | |  strcmp ( str ,  " COUNT " )  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . frequency_type  =  COUNTER ;  // setting frequency type to 'counter'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 	ExpEnv . config_struc . frequency_bound  =  1024.0 ;  // if 'counter', frequency bound is '1024.0'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 	return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      else  if  ( strcmp ( str ,  " TIME " )  = =  0  | |  strcmp ( str ,  " TIMING " )  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . frequency_type  =  TIME ;  // setting frequency type to 'time'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 	ExpEnv . config_struc . frequency_bound  =  0.02 ;  // if 'time', frequency bound is '0.02'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // value passed by argument is out of known range
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Yap_Error ( OUT_OF_KNOWNRANGE_ERROR , t , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // ARG1 is not an atom
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      Yap_NilError ( INVALID_PARAMETER_TYPE_ERROR , " Frequency type " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // current execution mode differs of 'SMART_JIT' and 'CONTINUOUS_COMPILATION'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Yap_NilError ( INCOMPATIBLEMODE_WARNING , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  Int 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								p_frequencyty2 ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  // this predicate works only 'SMART_JIT' and 'CONTINUOUS_COMPILATION' modes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  if  ( ExpEnv . config_struc . execution_mode  = =  SMART_JIT  | |  ExpEnv . config_struc . execution_mode  = =  CONTINUOUS_COMPILATION )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Term  t  =  Deref ( ARG1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // valid value for ARG1 is just 'atom'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( IsAtomTerm ( t ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      Term  u  =  Deref ( ARG2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // valid values for ARG2 are 'integer' and 'float'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( IsIntTerm ( u )  | |  IsFloatTerm ( u ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // ARG1 is atom and ARG2 is integer or float
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        int  i  =  0 ,  j  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        char  * tmp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // getting string from atom and stores it on 'str'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        char  * str  =  ( char * ) malloc ( YAP_AtomNameLength ( AtomOfTerm ( t ) ) * sizeof ( char ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        strcpy ( str ,  AtomName ( AtomOfTerm ( t ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // Making upper characters of 'str' (for comparison)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        UPPER_ENTRY ( str ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // getting ARG2 value
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Float  v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( IsIntTerm ( u ) )  v  =  ( Float ) IntOfTerm ( u ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( IsFloatTerm ( u ) )  v  =  FloatOfTerm ( u ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // setting 'frequency type' and 'frequency bound' if 'COUNTER'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( strcmp ( str ,  " COUNTER " )  = =  0  | |  strcmp ( str ,  " COUNT " )  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  if  ( v  <  20.0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            // Very low frequency bound to apply on 'COUNTER'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									    fprintf ( stderr , " %.2f is a very low value for the active frequency type. Reconsider its value... \n " ,  v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									    return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  ExpEnv . config_struc . frequency_type  =  COUNTER ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  ExpEnv . config_struc . frequency_bound  =  roundf ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // setting 'frequency type' and 'frequency bound' if 'TIME'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        else  if  ( strcmp ( str ,  " TIME " )  = =  0  | |  strcmp ( str ,  " TIMING " )  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  if  ( v  < =  0.0  | |  v  >  0.49 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            // Very low frequency bound to apply on 'COUNTER'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									    fprintf ( stderr , " %.2f is an invalid or a very high value for the active frequency type. Reconsider its value... \n " ,  v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									    return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  ExpEnv . config_struc . frequency_type  =  TIME ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  ExpEnv . config_struc . frequency_bound  =  v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          // value passed by argument (ARG1) is out of known range
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          Yap_Error ( OUT_OF_KNOWNRANGE_ERROR , t , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // ARG2 is not an 'integer' or 'float'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Yap_NilError ( INVALID_PARAMETER_TYPE_ERROR , " frequencyty/2 (2nd arg) " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // ARG1 is not an atom
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      Yap_NilError ( INVALID_PARAMETER_TYPE_ERROR , " frequencyty/2 (1st arg) " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // current execution mode differs of 'SMART_JIT' and 'CONTINUOUS_COMPILATION'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Yap_NilError ( INCOMPATIBLEMODE_WARNING , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  Int 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								p_frequency_bound ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  // this predicate works only 'SMART_JIT' and 'CONTINUOUS_COMPILATION' modes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  if  ( ExpEnv . config_struc . execution_mode  = =  SMART_JIT  | |  ExpEnv . config_struc . execution_mode  = =  CONTINUOUS_COMPILATION )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Term  t  =  Deref ( ARG1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // valid values for ARG1 are 'integer' and 'float'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( IsIntTerm ( t )  | |  IsFloatTerm ( t ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // ARG1 is integer or float
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // getting ARG1 value
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      Float  v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( IsIntTerm ( t ) )  v  =  ( Float ) IntOfTerm ( t ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( IsFloatTerm ( t ) )  v  =  FloatOfTerm ( t ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // setting 'frequency bound' if 'frequency type' is 'COUNTER'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( ExpEnv . config_struc . frequency_type  = =  COUNTER )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( v  <  20.0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          fprintf ( stderr , " %.2f is a very low value for the active frequency type. Reconsider its value... \n " ,  v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									ExpEnv . config_struc . frequency_bound  =  roundf ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // setting 'frequency bound' if 'frequency type' is 'TIME'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( v  < =  0.0  | |  v  >  0.49 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  fprintf ( stderr , " %.2f is an invalid or a very high value for the active frequency type. Reconsider its value... \n " ,  v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									ExpEnv . config_struc . frequency_bound  =  v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // ARG1 is not an 'integer' or 'float'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      Yap_NilError ( INVALID_PARAMETER_TYPE_ERROR , " frequency_bound/1 (1st arg) " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // current execution mode differs of 'SMART_JIT' and 'CONTINUOUS_COMPILATION'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Yap_NilError ( INCOMPATIBLEMODE_WARNING , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  Int 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								p_profiling_start_point ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  // this predicate works only 'SMART_JIT' and 'CONTINUOUS_COMPILATION' modes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  if  ( ExpEnv . config_struc . execution_mode  = =  SMART_JIT  | |  ExpEnv . config_struc . execution_mode  = =  CONTINUOUS_COMPILATION )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Term  t  =  Deref ( ARG1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Float  v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // valid value for ARG1 is just 'float'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( IsFloatTerm ( t ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      v  =  FloatOfTerm ( t ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( v  <  0.0  | |  v  > =  1.0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // value passed by argument is out of known range
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Yap_Error ( OUT_OF_KNOWNRANGE_ERROR , t , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      ExpEnv . config_struc . profiling_startp  =  v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // ARG1 is not float
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      Yap_NilError ( INVALID_PARAMETER_TYPE_ERROR , " profiling_start_point/1 (1st arg) " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // current execution mode differs of 'SMART_JIT' and 'CONTINUOUS_COMPILATION'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Yap_NilError ( INCOMPATIBLEMODE_WARNING , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  Int 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								p_main_clause_ty ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  // this predicate works only 'SMART_JIT' and 'CONTINUOUS_COMPILATION' modes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  if  ( ExpEnv . config_struc . execution_mode  = =  SMART_JIT  | |  ExpEnv . config_struc . execution_mode  = =  CONTINUOUS_COMPILATION )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Term  t  =  Deref ( ARG1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // valid values for ARG1 are 'integer' and 'atom'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( IsIntTerm ( t ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // ARG1 is integer
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      Int  v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      v  =  IntOfTerm ( t ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( v  <  0  | |  v  >  3 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // value passed by argument is out of known range
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Yap_Error ( OUT_OF_KNOWNRANGE_ERROR , t , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if YAP_DBG_PREDS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( ExpEnv . debug_struc . act_predicate_msgs . success_msgs )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        switch ( v )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          case  0 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            fprintf ( stderr , "       Type of main clause was changed to JUST HOT!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          case  1 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            fprintf ( stderr , "       Type of main clause was changed to HOT AND CALLEE!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          case  2 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            fprintf ( stderr , "       Type of main clause was changed to HOT AND GREATER!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          case  3 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            fprintf ( stderr , "       Type of main clause was changed to HOT AND FEWER!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // setting 'mainclause_ty' -- I should de add '1' because the first enum of 'enumMainClauseType' is 'UNUSED', used just for control
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      ExpEnv . config_struc . mainclause_ty  =  ( enumMainClauseType ) ( v + 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else  if  ( IsAtomTerm ( t ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // ARG1 is atom
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      enumMainClauseType  v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      int  i  =  0 ,  j  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      char  * tmp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // gets string from atom and stores it on 'str'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      char  * str  =  ( char * ) malloc ( YAP_AtomNameLength ( AtomOfTerm ( t ) ) * sizeof ( char ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      strcpy ( str ,  AtomName ( AtomOfTerm ( t ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // Makes upper characters of 'str' (for comparison)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      UPPER_ENTRY ( str ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // Detecting mainclause type chosen by user according to 'str'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( strcmp ( str ,  " JUSTHOT " )  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        v  =  JUST_HOT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if YAP_DBG_PREDS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( ExpEnv . debug_struc . act_predicate_msgs . success_msgs )  fprintf ( stderr , "       Type of main clause was changed to JUST HOT!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      else  if  ( strcmp ( str ,  " HOTANDCALLEE " )  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        v  =  HOT_AND_CALLEE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if YAP_DBG_PREDS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( ExpEnv . debug_struc . act_predicate_msgs . success_msgs )  fprintf ( stderr , "       Type of main clause was changed to HOT AND CALLEE!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      else  if  ( strcmp ( str ,  " HOTANDGREATER " )  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        v  =  HOT_AND_GREATER ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if YAP_DBG_PREDS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( ExpEnv . debug_struc . act_predicate_msgs . success_msgs )  fprintf ( stderr , "       Type of main clause was changed to HOT AND GREATER!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      else  if  ( strcmp ( str ,  " HOTANDFEWER " )  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        v  =  HOT_AND_FEWER ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if YAP_DBG_PREDS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( ExpEnv . debug_struc . act_predicate_msgs . success_msgs )  fprintf ( stderr , "       Type of main clause was changed to HOT AND FEWER!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // value passed by argument is out of known range
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Yap_Error ( OUT_OF_KNOWNRANGE_ERROR , t , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      ExpEnv . config_struc . mainclause_ty  =  v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // ARG1 is not an integer or atom
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      Yap_NilError ( INVALID_PARAMETER_TYPE_ERROR , " main_clause_ty/1 (1st arg) " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // current execution mode differs of 'SMART_JIT' and 'CONTINUOUS_COMPILATION'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Yap_NilError ( INCOMPATIBLEMODE_WARNING , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  Int 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								p_compilation_threads ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  // this predicate works only 'CONTINUOUS_COMPILATION' mode
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  if  ( ExpEnv . config_struc . execution_mode  = =  SMART_JIT  | |  ExpEnv . config_struc . execution_mode  = =  CONTINUOUS_COMPILATION )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Term  t  =  Deref ( ARG1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Int  v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // valid value for ARG1 is 'integer' (because it defines number of threads)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( IsIntTerm ( t ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // ARG1 is integer
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      v  =  IntOfTerm ( t ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( v  <  1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // ERROR: number of threads is negative!!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Yap_Error ( OUT_OF_KNOWNRANGE_ERROR , t , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( v  > =  ExpEnv . config_struc . ncores )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // WARNING: number of threads is not ideal -- real parallelism won't occur!!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        fprintf ( stderr , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          "       It was detected %ld cores on this computer, therefore it is ideally to set just %ld compilation thread. Reconsider its value... \n " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          ExpEnv . config_struc . ncores ,  ExpEnv . config_struc . ncores - 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // setting compilation threads
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      ExpEnv . config_struc . compilation_threads  =  v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      /* initializing structures which will handle compilation threads */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( ExpEnv . config_struc . threaded_compiler_threads )  free ( ExpEnv . config_struc . threaded_compiler_threads ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( ExpEnv . config_struc . posthreads )  free ( ExpEnv . config_struc . posthreads ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . threaded_compiler_threads  =  ( pthread_t * ) malloc ( v * sizeof ( pthread_t ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ExpEnv . config_struc . posthreads  =  ( CELL * ) malloc ( v * sizeof ( CELL ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        int  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        for  ( i  =  0 ;  i  <  v ;  i + + )  ExpEnv . config_struc . posthreads [ i ]  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      /***/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if YAP_DBG_PREDS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( ExpEnv . debug_struc . act_predicate_msgs . success_msgs )  fprintf ( stderr , "       Type of main clause was changed to HOT AND FEWER!! \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      // ARG1 is not an integer
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      Yap_NilError ( INVALID_PARAMETER_TYPE_ERROR , " compilation_threads/1 (1st arg) " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // current execution mode differs of 'CONTINUOUS_COMPILATION'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Yap_NilError ( INCOMPATIBLEMODE_WARNING , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  FALSE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  Int 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								p_enable_recompilation ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  ExpEnv . config_struc . torecompile  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  Int 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								p_disable_recompilation ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  ExpEnv . config_struc . torecompile  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  Int 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								p_only_profiled_interpreter ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  ExpEnv . config_struc . useonlypi  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  Int 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								p_noonly_profiled_interpreter ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-12 23:30:14 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  ExpEnv . config_struc . useonlypi  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  return  TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# pragma GCC diagnostic pop 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								void 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Yap_InitJitConfigPreds ( void ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Yap_InitCPred ( " execution_mode " ,  1 ,  p_execution_mode ,  SafePredFlag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Yap_InitCPred ( " interpreted_mode " ,  0 ,  p_interpreted_mode ,  SafePredFlag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Yap_InitCPred ( " smartjit_mode " ,  0 ,  p_smartjit_mode ,  SafePredFlag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Yap_InitCPred ( " continuouscompilation_mode " ,  0 ,  p_continuouscompilation_mode ,  SafePredFlag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Yap_InitCPred ( " justcompiled_mode " ,  0 ,  p_justcompiled_mode ,  SafePredFlag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Yap_InitCPred ( " frequencyty1 " ,  1 ,  p_frequencyty1 ,  SafePredFlag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Yap_InitCPred ( " frequencyty2 " ,  2 ,  p_frequencyty2 ,  SafePredFlag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Yap_InitCPred ( " frequency_bound " ,  1 ,  p_frequency_bound ,  SafePredFlag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Yap_InitCPred ( " profiling_start_point " ,  1 ,  p_profiling_start_point ,  SafePredFlag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Yap_InitCPred ( " main_clause_ty " ,  1 ,  p_main_clause_ty ,  SafePredFlag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Yap_InitCPred ( " compilation_threads " ,  1 ,  p_compilation_threads ,  SafePredFlag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Yap_InitCPred ( " enable_recompilation " ,  0 ,  p_enable_recompilation ,  SafePredFlag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Yap_InitCPred ( " disable_recompilation " ,  0 ,  p_disable_recompilation ,  SafePredFlag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Yap_InitCPred ( " only_profiled_interpreter " ,  0 ,  p_only_profiled_interpreter ,  SafePredFlag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Yap_InitCPred ( " noonly_profiled_interpreter " ,  0 ,  p_noonly_profiled_interpreter ,  SafePredFlag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								}