🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by T.N. Vijaykumar. Mon, 09 Nov 1992 17:47
Inlining bug
#1340
Author: T.N. Vijaykumar.
Date: Mon, 09 Nov 1992 17:47
3667 lines
68159 bytes
Hi

I got the 2.3.1 version after you advised me to do so. Unfortunately,
the bug seems to prevail. Here is the rest of the story.


vijay

INLINING BUG 


Gcc version number : 2.3.1


The input file after preprocessing is as follows.  I have marked the
place where the funtion is getting inlined by /*++++++++++++*/ which
produces code that segmentation faults. The call in "tautology" to
"taut_special_cases" gets inlined. This inlined version has bad code.
The function "taut_special_cases" is declared as inline.
---------------------------------------------------------

typedef unsigned int	size_t;		

extern	struct	_iobuf {
	int	_cnt;
	char	*_ptr;
	char	*_base;
	int	_bufsiz;
	short	_flag;
	short	_file;
} _iob[3];
typedef	struct _iobuf	FILE;

typedef	long	fpos_t;


extern FILE
	*fopen(),
	*fdopen(),
	*freopen(),
	*popen(),
	*tmpfile();
extern char
	*ctermid(),
	*cuserid(),
	*fgets(),
	*gets(),
	*tmpnam();
extern int
	fclose(),
	fflush(),
	fgetc(),
	fgetpos(),
	fprintf(),
	fputc(),
	fputs(),
	fscanf(),
	fseek(),
	fsetpos(),
	printf(),
	puts(),
	remove(),
	rename(),
	scanf(),
	setvbuf(),
	sscanf(),
	ungetc(),
	vfprintf(),
	vprintf(),
	vsprintf();
extern long
	ftell();
extern size_t
	fread(),
	fwrite();
extern void
	clearerr(),
	perror(),
	rewind(),
	setbuf(),
	setbuffer();


extern char
	*tempnam();
extern int
	getw(),
	pclose(),
	putw();

extern int
	setlinebuf();

extern char	*sprintf();

typedef struct sm_element_struct sm_element;
typedef struct sm_row_struct sm_row;
typedef struct sm_col_struct sm_col;
typedef struct sm_matrix_struct sm_matrix;

struct sm_element_struct {
    int row_num;		
    int col_num;		
    sm_element *next_row;	
    sm_element *prev_row;	
    sm_element *next_col;	
    sm_element *prev_col;	
    char *user_word;		
};

struct sm_row_struct {
    int row_num;		
    int length;			
    int flag;			
    sm_element *first_col;	
    sm_element *last_col;	
    sm_row *next_row;		
    sm_row *prev_row;		
    char *user_word;		
};

struct sm_col_struct {
    int col_num;		
    int length;			
    int flag;			
    sm_element *first_row;	
    sm_element *last_row;	
    sm_col *next_col;		
    sm_col *prev_col;		
    char *user_word;		
};

struct sm_matrix_struct {
    sm_row **rows;		
    int rows_size;		
    sm_col **cols;		
    int cols_size;		
    sm_row *first_row;		
    sm_row *last_row;		
    int nrows;			
    sm_col *first_col;		
    sm_col *last_col;		
    int ncols;			
    char *user_word;		
};

extern sm_matrix *sm_alloc(), *sm_alloc_size(), *sm_dup();
extern void sm_free(), sm_delrow(), sm_delcol(), sm_resize();
extern void sm_write(), sm_print(), sm_dump(), sm_cleanup();
extern void sm_copy_row(), sm_copy_col();
extern void sm_remove(), sm_remove_element();
extern sm_element *sm_insert(), *sm_find();
extern sm_row *sm_longest_row();
extern sm_col *sm_longest_col();
extern int sm_read(), sm_read_compressed();

extern sm_row *sm_row_alloc(), *sm_row_dup(), *sm_row_and();
extern void sm_row_free(), sm_row_remove(), sm_row_print();
extern sm_element *sm_row_insert(), *sm_row_find();
extern int sm_row_contains(), sm_row_intersects();
extern int sm_row_compare(), sm_row_hash();

extern sm_col *sm_col_alloc(), *sm_col_dup(), *sm_col_and();
extern void sm_col_free(), sm_col_remove(), sm_col_print();
extern sm_element *sm_col_insert(), *sm_col_find();
extern int sm_col_contains(), sm_col_intersects();
extern int sm_col_compare(), sm_col_hash();

extern int sm_row_dominance(), sm_col_dominance(), sm_block_partition();




extern sm_row *sm_minimum_cover();

extern	unsigned short *_pctype;
extern  unsigned short _ctype__[];

extern	int	tolower(), toupper();

extern FILE *popen(), *tmpfile();
extern int pclose();

extern void clearerr();


extern void rewind();

extern void abort(), free(), exit(), perror();
extern char *getenv(), *malloc(), *realloc();
extern int system();
extern double atof();

extern char *strcpy(), *strncpy(), *strcat(), *strncat(), *strerror();
extern char *strpbrk(), *strtok(), *strchr(), *strrchr(), *strstr();
extern int strcoll(), strxfrm(), strncmp(), strlen(), strspn(), strcspn();
extern char *memmove(), *memccpy(), *memchr(), *memcpy(), *memset();
extern int memcmp(), strcmp();

extern long util_cpu_time();
extern int util_getopt();
extern void util_getopt_reset();
extern char *util_path_search();
extern char *util_file_search();
extern int util_pipefork();
extern void util_print_cpu_stats();
extern char *util_print_time();
extern int util_save_image();
extern char *util_strsav();
extern char *util_tilde_expand();
extern void util_restart();



extern int util_optind;
extern char *util_optarg;

typedef unsigned int *pset;


typedef struct set_family {
    int wsize;                  
    int sf_size;                
    int capacity;               
    int count;                  
    int active_count;           
    pset data;                  
    struct set_family *next;    
} set_family_t, *pset_family;


extern int bit_count[256];



typedef struct cost_struct {
    int cubes;			
    int in;			
    int out;			
    int mv;			
    int total;			
    int primes;			
} cost_t, *pcost;



typedef struct pair_struct {
    int cnt;
    int *var1;
    int *var2;
} pair_t, *ppair;



typedef struct symbolic_list_struct {
    int variable;
    int pos;
    struct symbolic_list_struct *next;
} symbolic_list_t;



typedef struct symbolic_label_struct {
    char *label;
    struct symbolic_label_struct *next;
} symbolic_label_t;



typedef struct symbolic_struct {
    symbolic_list_t *symbolic_list;	
    int symbolic_list_length;		
    symbolic_label_t *symbolic_label;	
    int symbolic_label_length;		
    struct symbolic_struct *next;
} symbolic_t;



typedef struct {
                     pset_family F, D, R;		
    char *filename;             
    int pla_type;               
                      pset phase;                
    ppair pair;                 
    char **label;		
    symbolic_t *symbolic;	
    symbolic_t *symbolic_output;
} PLA_t, *pPLA;


extern unsigned int debug;              
extern int verbose_debug;              
extern char *total_name[     16];    
extern long total_time[     16];     
extern int total_calls[     16];     

extern int echo_comments;		
extern int echo_unknown_commands;	
extern int force_irredundant;          
extern int skip_make_sparse;
extern int kiss;                       
extern int pos;                        
extern int print_solution;             
extern int recompute_onset;            
extern int remove_essential;           
extern int single_expand;              
extern int summary;                    
extern int trace;                      
extern int unwrap_onset;               
extern int use_random_order;		
extern int use_super_gasp;		
extern char *filename;			
extern int debug_exact_minimization;   





struct pla_types_struct {
    char *key;
    int value;
};


struct cube_struct {
    int size;                   
    int num_vars;               
    int num_binary_vars;        
    int *first_part;            
    int *last_part;             
    int *part_size;             
    int *first_word;            
    int *last_word;             
    pset binary_mask;           
    pset mv_mask;               
    pset *var_mask;             
    pset *temp;                 
    pset fullset;               
    pset emptyset;              
    unsigned int inmask;        
    int inword;                 
    int *sparse;                
    int num_mv_vars;            
    int output;                 
};

struct cdata_struct {
    int *part_zeros;            
    int *var_zeros;             
    int *parts_active;          
    int *is_unate;             
    int vars_active;            
    int vars_unate;             
    int best;                   
};


extern struct pla_types_struct pla_types[];
extern struct cube_struct cube, temp_cube_save;
extern struct cdata_struct cdata, temp_cdata_save;

	extern int binate_split_select();
	extern                  pset_family cubeunlist();
	extern                   pset *cofactor();
	extern                   pset *cube1list();
	extern                   pset *cube2list();
	extern                   pset *cube3list();
	extern                   pset *scofactor();
	extern void massive_count();
	extern                  pset_family complement();
	extern                  pset_family simplify();
	extern void simp_comp();
	extern int d1_rm_equal();
	extern int rm2_contain();
	extern int rm2_equal();
	extern int rm_contain();
	extern int rm_equal();
	extern int rm_rev_contain();
	extern pset *sf_list();
	extern pset *sf_sort();
	extern pset_family d1merge();
	extern pset_family dist_merge();
	extern pset_family sf_contain();
	extern pset_family sf_dupl();
	extern pset_family sf_ind_contain();
	extern pset_family sf_ind_unlist();
	extern pset_family sf_merge();
	extern pset_family sf_rev_contain();
	extern pset_family sf_union();
	extern pset_family sf_unlist();
	extern void cube_setup();
	extern void restore_cube_struct();
	extern void save_cube_struct();
	extern void setdown_cube();
	extern PLA_labels();
	extern char *get_word();
	extern int label_index();
	extern int read_pla();
	extern int read_symbolic();
	extern pPLA new_PLA();
	extern void PLA_summary();
	extern void free_PLA();
	extern void parse_pla();
	extern void read_cube();
	extern void skip_line();
	extern foreach_output_function();
	extern int cubelist_partition();
	extern int so_both_do_espresso();
	extern int so_both_do_exact();
	extern int so_both_save();
	extern int so_do_espresso();
	extern int so_do_exact();
	extern int so_save();
	extern                  pset_family cof_output();
	extern                  pset_family lex_sort();
	extern                  pset_family mini_sort();
	extern                  pset_family random_order();
	extern                  pset_family size_sort();
	extern                  pset_family sort_reduce();
	extern                  pset_family uncof_output();
	extern                  pset_family unravel();
	extern                  pset_family unravel_range();
	extern void so_both_espresso();
	extern void so_espresso();
	extern char *fmt_cost();
	extern char *print_cost();
	extern char *	util_strsav();
	extern void copy_cost();
	extern void cover_cost();
	extern void fatal();
	extern void print_trace();
	extern void size_stamp();
	extern void totals();
	extern char *fmt_cube();
	extern char *fmt_expanded_cube();
	extern char *pc1();
	extern char *pc2();
	extern char *pc3();
	extern int makeup_labels();
	extern kiss_output();
	extern kiss_print_cube();
	extern output_symbolic_constraints();
	extern void cprint();
	extern void debug1_print();
	extern void debug_print();
	extern void eqn_output();
	extern void fpr_header();
	extern void fprint_pla();
	extern void pls_group();
	extern void pls_label();
	extern void pls_output();
	extern void print_cube();
	extern void print_expanded_cube();
	extern void sf_debug_print();
	extern find_equiv_outputs();
	extern int check_equiv();
	extern                  pset_family espresso();
	extern int essen_cube();
	extern                  pset_family cb_consensus();
	extern                  pset_family cb_consensus_dist0();
	extern                  pset_family essential();
	extern                  pset_family minimize_exact();
	extern                  pset_family minimize_exact_literals();
	extern int feasibly_covered();
	extern int most_frequent();
	extern                  pset_family all_primes();
	extern                  pset_family expand();
	extern                  pset_family find_all_primes();
	extern void elim_lowering();
	extern void essen_parts();
	extern void essen_raising();
	extern void expand1();
	extern void mincov();
	extern void select_feasible();
	extern void setup_BB_CC();
	extern                  pset_family expand_gasp();
	extern                  pset_family irred_gasp();
	extern                  pset_family last_gasp();
	extern                  pset_family super_gasp();
	extern void expand1_gasp();
	extern int 	util_getopt();
	extern find_dc_inputs();
	extern find_inputs();
	extern form_bitvector();
	extern map_dcset();
	extern map_output_symbolic();
	extern map_symbolic();
	extern                  pset_family map_symbolic_cover();
	extern symbolic_hack_labels();
	extern int cube_is_covered();
	extern int taut_special_cases();
	extern int tautology();
	extern                  pset_family irredundant();
	extern void mark_irredundant();
	extern void irred_split_cover();
	extern sm_matrix *irred_derive_table();
	extern pset minterms();
	extern void explode();
	extern void map();
	extern output_phase_setup();
	extern pPLA set_phase();
	extern                  pset_family opo();
	extern                   pset find_phase();
	extern pset_family find_covers();
	extern pset_family form_cover_table();
	extern pset_family opo_leaf();
	extern pset_family opo_recur();
	extern void opoall();
	extern void phase_assignment();
	extern void repeated_phase_assignment();
	extern generate_all_pairs();
	extern int **find_pairing_cost();
	extern int find_best_cost();
	extern int greedy_best_cost();
	extern int minimize_pair();
	extern int pair_free();
	extern pair_all();
	extern                  pset_family delvar();
	extern                  pset_family pairvar();
	extern ppair pair_best_cost();
	extern ppair pair_new();
	extern ppair pair_save();
	extern print_pair();
	extern void find_optimal_pairing();
	extern void set_pair();
	extern void set_pair1();
	extern                  pset_family primes_consensus();
	extern int sccc_special_cases();
	extern                  pset_family reduce();
	extern                   pset reduce_cube();
	extern                   pset sccc();
	extern                   pset sccc_cube();
	extern                   pset sccc_merge();
	extern int set_andp();
	extern int set_orp();
	extern int setp_disjoint();
	extern int setp_empty();
	extern int setp_equal();
	extern int setp_full();
	extern int setp_implies();
	extern char *pbv1();
	extern char *ps1();
	extern int *sf_count();
	extern int *sf_count_restricted();
	extern int bit_index();
	extern int set_dist();
	extern int set_ord();
	extern void set_adjcnt();
	extern pset set_and();
	extern pset set_clear();
	extern pset set_copy();
	extern pset set_diff();
	extern pset set_fill();
	extern pset set_merge();
	extern pset set_or();
	extern pset set_xor();
	extern pset sf_and();
	extern pset sf_or();
	extern pset_family sf_active();
	extern pset_family sf_addcol();
	extern pset_family sf_addset();
	extern pset_family sf_append();
	extern pset_family sf_bm_read();
	extern pset_family sf_compress();
	extern pset_family sf_copy();
	extern pset_family sf_copy_col();
	extern pset_family sf_delc();
	extern pset_family sf_delcol();
	extern pset_family sf_inactive();
	extern pset_family sf_join();
	extern pset_family sf_new();
	extern pset_family sf_permute();
	extern pset_family sf_read();
	extern pset_family sf_save();
	extern pset_family sf_transpose();
	extern void set_write();
	extern void sf_bm_print();
	extern void sf_cleanup();
	extern void sf_delset();
	extern void sf_free();
	extern void sf_print();
	extern void sf_write();
	extern int ccommon();
	extern int cdist0();
	extern int full_row();
	extern int ascend();
	extern int cactive();
	extern int cdist();
	extern int cdist01();
	extern int cvolume();
	extern int d1_order();
	extern int d1_order_size();
	extern int desc1();
	extern int descend();
	extern int lex_order();
	extern int lex_order1();
	extern pset force_lower();
	extern void consensus();
	extern                  pset_family cb1_dsharp();
	extern                  pset_family cb_dsharp();
	extern                  pset_family cb_recur_dsharp();
	extern                  pset_family cb_recur_sharp();
	extern                  pset_family cb_sharp();
	extern                  pset_family cv_dsharp();
	extern                  pset_family cv_intersect();
	extern                  pset_family cv_sharp();
	extern                  pset_family dsharp();
	extern                  pset_family make_disjoint();
	extern                  pset_family sharp();
pset do_sm_minimum_cover();
	extern                  pset_family make_sparse();
	extern                  pset_family mv_reduce();
	extern qsort();
	extern qst();
	extern                  pset_family find_all_minimal_covers_petrick();
	extern                  pset_family map_cover_to_unate();
	extern                  pset_family map_unate_to_cover();
	extern pset_family exact_minimum_cover();
	extern pset_family gen_primes();
	extern pset_family unate_compl();
	extern pset_family unate_complement();
	extern pset_family unate_intersect();
	extern PLA_permute();
	extern int PLA_verify();
	extern int check_consistency();
	extern int verify();

static void fcube_is_covered();
static void ftautology();
static int ftaut_special_cases();


static int Rp_current;



inline int taut_special_cases(T)
                  pset *T;			
{
    register                   pset *T1, *Tsave, p, ceil=cube.temp[0], temp=cube.temp[1];
                      pset *A, *B;
    int var;

    
    for(T1 = T+2; (p = *T1++) != 0; ) {
	if (full_row(p, T[0])) {
	            		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
	    return 	1;
	}
    }

    
start:
        {register int i_=                          ( T[0][0] & 0x03ff); do ceil[i_]= T[0][i_]; while (--i_>=0);};
    for(T1 = T+2; (p = *T1++) != 0; ) {
	    {register int i_=               ( ceil[0] & 0x03ff);          (ceil[0] &= ~0x03ff, ceil[0] |= (i_));    do ceil[i_] =  ceil[i_] |  p[i_]; while (--i_>0);};
    }
    if (! setp_equal(ceil, cube.fullset)) {
	        		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
	return 0;
    }

    
    massive_count(T);

    
    if (cdata.vars_unate == cdata.vars_active) {
	        		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
	return 0;

    
    } else if (cdata.vars_active == 1) {
	        		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
	return 	1;

    
    } else if (cdata.vars_unate != 0) {
	
	(void) set_copy(ceil, cube.emptyset);
	for(var = 0; var < cube.num_vars; var++) {
	    if (cdata.is_unate[var]) {
		    {register int i_=               ( ceil[0] & 0x03ff);          (ceil[0] &= ~0x03ff, ceil[0] |= (i_));    do ceil[i_] =  ceil[i_] |  cube.var_mask[var][i_]; while (--i_>0);};
	    }
	}

	
	for(Tsave = T1 = T+2; (p = *T1++) != 0; ) {
	    if (setp_implies(ceil, set_or(temp, p, T[0]))) {
		*Tsave++ = p;
	    }
	}
	*Tsave++ = 0;
	T[1] = (                  pset) Tsave;

	if (debug &            0x0200) {
	    printf("UNATE_REDUCTION: %d unate variables, reduced to %d\n",
		cdata.vars_unate,          (((                  pset *) T[1] - T) - 3));
	}
	goto start;

    
    } else if (cdata.var_zeros[cdata.best] <          (((                  pset *) T[1] - T) - 3) / 2) {
	if (cubelist_partition(T, &A, &B, debug &            0x0200) == 0) {
	    return 2;
	} else {
	            		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
	    if (tautology(A)) {
		        		    ((B[0]) ? (free((char *) (B[0])), (B[0]) = 0) : 0); 		    ((B) ? (free((char *) (B)), (B) = 0) : 0);;
		return 	1;
	    } else {
		return tautology(B);
	    }
	}
    }

    
    return 2;
}



                 pset_family
irredundant(F, D)
                 pset_family F, D;
{
    mark_irredundant(F, D);
    return sf_inactive(F);
}






void
mark_irredundant(F, D)
                 pset_family F, D;
{
                     pset_family E, Rt, Rp;
    pset p, p1, last;
    sm_matrix *table;
    sm_row *cover;
    sm_element *pe;

    
    irred_split_cover(F, D, &E, &Rt, &Rp);
    table = irred_derive_table(D, E, Rp);
    cover = sm_minimum_cover(table, 		((int *) 0),  1,  0);

    
        for( p=F->data, last= p+F->count*F->wsize; p< last; p+=F->wsize) {
	        (p[0] &= ~ (          0x2000          ));
	        (p[0] &= ~ (        0x0400          ));
    }
        for( p=E->data, last= p+E->count*E->wsize; p< last; p+=E->wsize) {
	p1 =    ((F)->data + (F)->wsize * (                (p[0] >> 16)));
	 {    if (! (setp_equal(p1, p))) {	(void) fprintf((&_iob[2]),	    "Assertion failed: file %s, line %d\n\"%s\"\n",	    "irred.c", 49, "setp_equal(p1, p)");	(void) fflush((&_iob[1]));	abort();    }};
	          (p1[0] |= (          0x2000          ));
	          (p1[0] |= (        0x0400          ));		
    }
    		for( pe = cover->first_col;  pe != 0;  pe =  pe->next_col) {
	p1 =    ((F)->data + (F)->wsize * ( pe->col_num));
	          (p1[0] |= (          0x2000          ));
    }

    if (debug &           0x0020) {
	printf("# IRRED: F=%d E=%d R=%d Rt=%d Rp=%d Rc=%d Final=%d Bound=%d\n",
	    F->count, E->count, Rt->count+Rp->count, Rt->count, Rp->count,
	    cover->length, E->count + cover->length, 0);
    }

               sf_free(E);
               sf_free(Rt);
               sf_free(Rp);
    sm_free(table);
    sm_row_free(cover);
}









void
irred_split_cover(F, D, E, Rt, Rp)
                 pset_family F, D;
                 pset_family *E, *Rt, *Rp;
{
    register                   pset p, last;
    register int index;
                     pset_family R;
                      pset *FD, *ED;

    
    index = 0;
        for( p=F->data, last= p+F->count*F->wsize; p< last; p+=F->wsize) {
	      (p[0] &= 0xffff, p[0] |= (( index) << 16));
	index++;
    }

    *E =             sf_new(10, cube.size);
    *Rt =             sf_new(10, cube.size);
    *Rp =             sf_new(10, cube.size);
    R =             sf_new(10, cube.size);

    
    FD = cube2list(F, D);
        for( p=F->data, last= p+F->count*F->wsize; p< last; p+=F->wsize) {
	if (cube_is_covered(FD, p)) {
	    R = sf_addset(R, p);
	} else {
	    *E = sf_addset(*E, p);
	}
	if (debug & 	0x4000) {
	    (void) printf("IRRED1: zr=%d ze=%d to-go=%d time=%s\n",
		R->count, (*E)->count, F->count - (R->count + (*E)->count),
			util_print_time(		util_cpu_time()));
	}
    }
            		    ((FD[0]) ? (free((char *) (FD[0])), (FD[0]) = 0) : 0); 		    ((FD) ? (free((char *) (FD)), (FD) = 0) : 0);;

    
    ED = cube2list(*E, D);
        for( p=R->data, last= p+R->count*R->wsize; p< last; p+=R->wsize) {
	if (cube_is_covered(ED, p)) {
	    *Rt = sf_addset(*Rt, p);
	} else {
	    *Rp = sf_addset(*Rp, p);
	}
	if (debug & 	0x4000) {
	    (void) printf("IRRED1: zr=%d zrt=%d to-go=%d time=%s\n",
		(*Rp)->count, (*Rt)->count,
		R->count - ((*Rp)->count +(*Rt)->count), 	util_print_time(		util_cpu_time()));
	}
    }
            		    ((ED[0]) ? (free((char *) (ED[0])), (ED[0]) = 0) : 0); 		    ((ED) ? (free((char *) (ED)), (ED) = 0) : 0);;

               sf_free(R);
}







sm_matrix *
irred_derive_table(D, E, Rp)
                 pset_family D, E, Rp;
{
    register                   pset last, p, *list;
    sm_matrix *table;
    int size_last_dominance, i;

    
        for( p=D->data, last= p+D->count*D->wsize; p< last; p+=D->wsize) {
	        (p[0] &= ~ (          0x1000          ));
    }
        for( p=E->data, last= p+E->count*E->wsize; p< last; p+=E->wsize) {
	        (p[0] &= ~ (          0x1000          ));
    }

    
        for( p=Rp->data, last= p+Rp->count*Rp->wsize; p< last; p+=Rp->wsize) {
	          (p[0] |= (          0x1000          ));             
    }

    
    list = cube3list(D, E, Rp);
    table = sm_alloc();
    size_last_dominance = 0;
    i = 0;
        for( p=Rp->data, last= p+Rp->count*Rp->wsize; p< last; p+=Rp->wsize) {
	Rp_current =                (p[0] >> 16);
	fcube_is_covered(list, p, table);
	        (p[0] &= ~ (          0x1000          ));	
	if (debug & 	0x4000) {
	    (void) printf("IRRED1: %d of %d to-go=%d, table=%dx%d time=%s\n",
		i, Rp->count, Rp->count - i,
		table->nrows, table->ncols, 	util_print_time(		util_cpu_time()));
	}
	
	if (table->nrows - size_last_dominance > 1000) {
	    (void) sm_row_dominance(table);
	    size_last_dominance = table->nrows;
	    if (debug & 	0x4000) {
		(void) printf("IRRED1: delete redundant rows, now %dx%d\n",
		    table->nrows, table->ncols);
	    }
	}
	i++;
    }
            		    ((list[0]) ? (free((char *) (list[0])), (list[0]) = 0) : 0); 		    ((list) ? (free((char *) (list)), (list) = 0) : 0);;

    return table;
}


int
cube_is_covered(T, c)
                  pset *T, c;
{
    return tautology(cofactor(T,c));
}




int
tautology(T)
                  pset *T;         
{
    register                   pset cl, cr;
    register int best, result;
    static int taut_level = 0;

    if (debug &            0x0200) {
	debug_print(T, "TAUTOLOGY", taut_level++);
    }
/*+++++++++++++++++++++++++++++++++++++++++++++++++++*/
    if ((result = taut_special_cases(T)) == 2) {
	cl =               	set_clear(	    ((unsigned int *) malloc(sizeof(unsigned int) * (           ((cube.size) <=             32               ? 2 : (     ((((cube.size)-1) >>          5               ) + 1) + 1))))), cube.size);
	cr =               	set_clear(	    ((unsigned int *) malloc(sizeof(unsigned int) * (           ((cube.size) <=             32               ? 2 : (     ((((cube.size)-1) >>          5               ) + 1) + 1))))), cube.size);
	best = binate_split_select(T, cl, cr,            0x0200);
	result = tautology(scofactor(T, cl, best)) &&
		 tautology(scofactor(T, cr, best));
	        		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
	            			    ((cl) ? (free((char *) (cl)), (cl) = 0) : 0);
	            			    ((cr) ? (free((char *) (cr)), (cr) = 0) : 0);
    }

    if (debug &            0x0200) {
	printf("exit TAUTOLOGY[%d]: %s\n", --taut_level,  ((result) == 0 ? "FALSE" : ((result) == 1 ? "TRUE" : "MAYBE")));
    }
    return result;
}






static void
fcube_is_covered(T, c, table)
                  pset *T, c;
sm_matrix *table;
{
    ftautology(cofactor(T,c), table);
}



static void
ftautology(T, table)
                  pset *T;         	
sm_matrix *table;
{
    register                   pset cl, cr;
    register int best;
    static int ftaut_level = 0;

    if (debug &            0x0200) {
	debug_print(T, "FIND_TAUTOLOGY", ftaut_level++);
    }

    if (ftaut_special_cases(T, table) == 2) {
	cl =               	set_clear(	    ((unsigned int *) malloc(sizeof(unsigned int) * (           ((cube.size) <=             32               ? 2 : (     ((((cube.size)-1) >>          5               ) + 1) + 1))))), cube.size);
	cr =               	set_clear(	    ((unsigned int *) malloc(sizeof(unsigned int) * (           ((cube.size) <=             32               ? 2 : (     ((((cube.size)-1) >>          5               ) + 1) + 1))))), cube.size);
	best = binate_split_select(T, cl, cr,            0x0200);

	ftautology(scofactor(T, cl, best), table);
	ftautology(scofactor(T, cr, best), table);

	        		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
	            			    ((cl) ? (free((char *) (cl)), (cl) = 0) : 0);
	            			    ((cr) ? (free((char *) (cr)), (cr) = 0) : 0);
    }

    if (debug &            0x0200) {
	(void) printf("exit FIND_TAUTOLOGY[%d]: table is %d by %d\n",
	    --ftaut_level, table->nrows, table->ncols);
    }
}

static int
ftaut_special_cases(T, table)
                  pset *T;                 
sm_matrix *table;
{
    register                   pset *T1, *Tsave, p, temp = cube.temp[0], ceil = cube.temp[1];
    int var, rownum;

    
    for(T1 = T+2; (p = *T1++) != 0; ) {
	if (!         (p[0] & (          0x1000          ))) {
	    if (full_row(p, T[0])) {
		
		        		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
		return 	1;
	    }
	}
    }

    
start:
    massive_count(T);

    
    if (cdata.vars_unate == cdata.vars_active) {
	
	rownum = table->last_row ? table->last_row->row_num+1 : 0;
	(void) sm_insert(table, rownum, Rp_current);
	for(T1 = T+2; (p = *T1++) != 0; ) {
	    if (        (p[0] & (          0x1000          ))) {
		
		if (full_row(p, T[0])) {
		    (void) sm_insert(table, rownum, (int)                (p[0] >> 16));
		}
	    }
	}
	        		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
	return 	1;

    
    } else if (cdata.vars_unate != 0) {
	
	(void) set_copy(ceil, cube.emptyset);
	for(var = 0; var < cube.num_vars; var++) {
	    if (cdata.is_unate[var]) {
		    {register int i_=               ( ceil[0] & 0x03ff);          (ceil[0] &= ~0x03ff, ceil[0] |= (i_));    do ceil[i_] =  ceil[i_] |  cube.var_mask[var][i_]; while (--i_>0);};
	    }
	}

	
	for(Tsave = T1 = T+2; (p = *T1++) != 0; ) {
	    if (setp_implies(ceil, set_or(temp, p, T[0]))) {
		*Tsave++ = p;
	    }
	}
	*Tsave++ = 0;
	T[1] = (                  pset) Tsave;

	if (debug &            0x0200) {
	    printf("UNATE_REDUCTION: %d unate variables, reduced to %d\n",
		cdata.vars_unate,          (((                  pset *) T[1] - T) - 3));
	}
	goto start;
    }

    
    return 2;
}
--------------------------------------------------------------------


The assembly produced is as follows :- I have marked the insns that
are leading to segmentation fault by /*+++++++++++++++++*/. The firsst
insn moves 0 into $5 and the next insn dereferences thru $5.
---------------------------------------------------------------------
	.file	1 "myppirred.c"
	.set	nobopt

 # GNU C 2.3.1 [AL 1.1, MM 28] DECstation running ultrix compiled by CC

 # Cc1 defaults:

 # Cc1 arguments (-G value = 8, Cpu = default, ISA = 1):
 # -O

gcc2_compiled.:
	.rdata
	.align	2
$LC0:
	.ascii	"UNATE_REDUCTION: %d unate variables, reduced to %d\n\000"
	.text
	.align	2
	.globl	taut_special_cases

	.loc	1 1586
	.ent	taut_special_cases
taut_special_cases:
	.frame	$sp,64,$31		# vars= 16, regs= 7/0, args = 16, extra= 0
	.mask	0x803f0000,-8
	.fmask	0x00000000,0
	subu	$sp,$sp,64
	sw	$31,56($sp)
	sw	$21,52($sp)
	sw	$20,48($sp)
	sw	$19,44($sp)
	sw	$18,40($sp)
	sw	$17,36($sp)
	sw	$16,32($sp)
	lw	$2,cube+44
	move	$19,$4
	lw	$16,8($19)
	lw	$20,0($2)
	lw	$21,4($2)
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L78
	addu	$17,$19,12
	.set	macro
	.set	reorder

$L77:
	lw	$5,0($19)
	.set	noreorder
	.set	nomacro
	jal	full_row
	move	$4,$16
	.set	macro
	.set	reorder

	bne	$2,$0,$L138
	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L77
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L78:
	lw	$2,0($19)
	#nop
	lw	$2,0($2)
	#nop
	andi	$5,$2,0x03ff
$L79:
	lw	$2,0($19)
	sll	$3,$5,2
	addu	$4,$3,$20
	addu	$3,$3,$2
	lw	$2,0($3)
	subu	$5,$5,1
	.set	noreorder
	.set	nomacro
	bgez	$5,$L79
	sw	$2,0($4)
	.set	macro
	.set	reorder

	lw	$16,8($19)
	#nop
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L83
	addu	$17,$19,12
	.set	macro
	.set	reorder

	li	$6,-1024			# 0xfffffc00
$L88:
	lw	$2,0($20)
	#nop
	andi	$5,$2,0x03ff
	and	$2,$2,$6
	or	$2,$5,$2
	sw	$2,0($20)
$L85:
	sll	$3,$5,2
	addu	$4,$3,$20
	addu	$3,$3,$16
	lw	$2,0($4)
	lw	$3,0($3)
	subu	$5,$5,1
	or	$2,$2,$3
	.set	noreorder
	.set	nomacro
	bgtz	$5,$L85
	sw	$2,0($4)
	.set	macro
	.set	reorder

	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L88
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L83:
	lw	$5,cube+48
	.set	noreorder
	.set	nomacro
	jal	setp_equal
	move	$4,$20
	.set	macro
	.set	reorder

	beq	$2,$0,$L137
	.set	noreorder
	.set	nomacro
	jal	massive_count
	move	$4,$19
	.set	macro
	.set	reorder

	la	$2,cdata+20
	lw	$3,0($2)
	lw	$2,-4($2)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$3,$2,$L94
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

$L137:
	lw	$4,0($19)
	#nop
	beq	$4,$0,$L96
	jal	free
	sw	$0,0($19)
$L96:
	.set	noreorder
	.set	nomacro
	beq	$19,$0,$L135
	move	$2,$0
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	j	$L135
	move	$2,$0
	.set	macro
	.set	reorder

$L94:
	lw	$3,cdata+16
	#nop
	bne	$3,$2,$L100
$L138:
	lw	$4,0($19)
	#nop
	beq	$4,$0,$L102
	jal	free
	sw	$0,0($19)
$L102:
	.set	noreorder
	.set	nomacro
	beq	$19,$0,$L135
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	j	$L135
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

$L100:
	lw	$2,cdata+20
	#nop
	beq	$2,$0,$L106
	la	$16,cube+52
	lw	$5,0($16)
	.set	noreorder
	.set	nomacro
	jal	set_copy
	move	$4,$20
	.set	macro
	.set	reorder

	lw	$2,-48($16)
	#nop
	.set	noreorder
	.set	nomacro
	blez	$2,$L108
	move	$6,$0
	.set	macro
	.set	reorder

	li	$9,-1024			# 0xfffffc00
	la	$8,cube+4
$L114:
	lw	$2,cdata+12
	sll	$3,$6,2
	addu	$3,$3,$2
	lw	$2,0($3)
	#nop
	beq	$2,$0,$L109
	lw	$2,0($20)
	sll	$7,$6,2
	andi	$5,$2,0x03ff
	and	$2,$2,$9
	or	$2,$5,$2
	sw	$2,0($20)
$L111:
	lw	$2,cube+40
	#nop
	addu	$2,$7,$2
	lw	$2,0($2)
	sll	$3,$5,2
	addu	$4,$3,$20
	addu	$3,$3,$2
	lw	$2,0($4)
	lw	$3,0($3)
	subu	$5,$5,1
	or	$2,$2,$3
	.set	noreorder
	.set	nomacro
	bgtz	$5,$L111
	sw	$2,0($4)
	.set	macro
	.set	reorder

$L109:
	lw	$2,0($8)
	addu	$6,$6,1
	slt	$2,$6,$2
	bne	$2,$0,$L114
$L108:
	lw	$16,8($19)
	addu	$18,$19,8
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L116
	addu	$17,$19,12
	.set	macro
	.set	reorder

$L119:
	lw	$6,0($19)
	move	$4,$21
	.set	noreorder
	.set	nomacro
	jal	set_or
	move	$5,$16
	.set	macro
	.set	reorder

	move	$4,$20
	.set	noreorder
	.set	nomacro
	jal	setp_implies
	move	$5,$2
	.set	macro
	.set	reorder

	beq	$2,$0,$L115
	sw	$16,0($18)
	addu	$18,$18,4
$L115:
	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L119
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L116:
	sw	$0,0($18)
	lw	$2,debug
	addu	$18,$18,4
	andi	$2,$2,0x0200
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L78
	sw	$18,4($19)
	.set	macro
	.set	reorder

	subu	$6,$18,$19
	sra	$6,$6,2
	lw	$5,cdata+20
	la	$4,$LC0
	.set	noreorder
	.set	nomacro
	jal	printf
	subu	$6,$6,3
	.set	macro
	.set	reorder

	j	$L78
$L106:
	lw	$4,cdata+24
	lw	$2,cdata+4
	sll	$4,$4,2
	addu	$4,$4,$2
	lw	$2,4($19)
	#nop
	subu	$2,$2,$19
	sra	$2,$2,2
	subu	$2,$2,3
	srl	$3,$2,31
	addu	$2,$2,$3
	lw	$3,0($4)
	sra	$2,$2,1
	slt	$3,$3,$2
	.set	noreorder
	.set	nomacro
	beq	$3,$0,$L99
	move	$4,$19
	.set	macro
	.set	reorder

	lw	$7,debug
	addu	$5,$sp,16
	addu	$6,$sp,20
	.set	noreorder
	.set	nomacro
	jal	cubelist_partition
	andi	$7,$7,0x0200
	.set	macro
	.set	reorder

	beq	$2,$0,$L99
	lw	$4,0($19)
	#nop
	beq	$4,$0,$L126
	jal	free
	sw	$0,0($19)
$L126:
	beq	$19,$0,$L128
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

$L128:
	lw	$4,16($sp)
	jal	tautology
	beq	$2,$0,$L129
	lw	$2,20($sp)
	#nop
	lw	$4,0($2)
	#nop
	beq	$4,$0,$L131
	jal	free
	lw	$2,20($sp)
	#nop
	sw	$0,0($2)
$L131:
	lw	$4,20($sp)
	#nop
	.set	noreorder
	.set	nomacro
	beq	$4,$0,$L135
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

	jal	free
	sw	$0,20($sp)
	.set	noreorder
	.set	nomacro
	j	$L135
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

$L129:
	lw	$4,20($sp)
	jal	tautology
	j	$L135
$L99:
	li	$2,0x00000002		# 2
$L135:
	lw	$31,56($sp)
	lw	$21,52($sp)
	lw	$20,48($sp)
	lw	$19,44($sp)
	lw	$18,40($sp)
	lw	$17,36($sp)
	lw	$16,32($sp)
	addu	$sp,$sp,64
	j	$31
	.end	taut_special_cases
	.align	2
	.globl	irredundant

	.loc	1 1672
	.ent	irredundant
irredundant:
	.frame	$sp,24,$31		# vars= 0, regs= 2/0, args = 16, extra= 0
	.mask	0x80010000,-4
	.fmask	0x00000000,0
	subu	$sp,$sp,24
	sw	$31,20($sp)
	sw	$16,16($sp)
	.set	noreorder
	.set	nomacro
	jal	mark_irredundant
	move	$16,$4
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	sf_inactive
	move	$4,$16
	.set	macro
	.set	reorder

	lw	$31,20($sp)
	lw	$16,16($sp)
	addu	$sp,$sp,24
	j	$31
	.end	irredundant
	.rdata
	.align	2
$LC1:
	.ascii	"Assertion failed: file %s, line %d\n"
	.ascii	"\"%s\"\n\000"
	.sdata
	.align	2
$LC2:
	.ascii	"irred.c\000"
	.rdata
	.align	2
$LC3:
	.ascii	"setp_equal(p1, p)\000"
	.align	2
$LC4:
	.ascii	"# IRRED: F=%d E=%d R=%d Rt=%d Rp=%d Rc=%d Final=%d Bound"
	.ascii	"=%d\n\000"
	.text
	.align	2
	.globl	mark_irredundant

	.loc	1 1685
	.ent	mark_irredundant
mark_irredundant:
	.frame	$sp,88,$31		# vars= 16, regs= 8/0, args = 40, extra= 0
	.mask	0x807f0000,-4
	.fmask	0x00000000,0
	subu	$sp,$sp,88
	sw	$31,84($sp)
	sw	$22,80($sp)
	sw	$21,76($sp)
	sw	$20,72($sp)
	sw	$19,68($sp)
	sw	$18,64($sp)
	sw	$17,60($sp)
	sw	$16,56($sp)
	move	$19,$4
	move	$16,$5
	addu	$2,$sp,48
	sw	$2,16($sp)
	addu	$6,$sp,40
	.set	noreorder
	.set	nomacro
	jal	irred_split_cover
	addu	$7,$sp,44
	.set	macro
	.set	reorder

	lw	$5,40($sp)
	lw	$6,48($sp)
	.set	noreorder
	.set	nomacro
	jal	irred_derive_table
	move	$4,$16
	.set	macro
	.set	reorder

	move	$22,$2
	move	$4,$22
	move	$5,$0
	li	$6,0x00000001		# 1
	.set	noreorder
	.set	nomacro
	jal	sm_minimum_cover
	move	$7,$0
	.set	macro
	.set	reorder

	move	$20,$2
	lw	$2,12($19)
	lw	$3,0($19)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	lw	$17,20($19)
	sll	$2,$2,2
	addu	$18,$17,$2
	sltu	$2,$17,$18
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L142
	li	$3,-1025			# 0xfffffbff
	.set	macro
	.set	reorder

	li	$4,-8193			# 0xffffdfff
$L144:
	lw	$2,0($17)
	#nop
	and	$2,$2,$4
	and	$2,$2,$3
	sw	$2,0($17)
	lw	$2,0($19)
	#nop
	sll	$2,$2,2
	addu	$17,$17,$2
	sltu	$2,$17,$18
	bne	$2,$0,$L144
$L142:
	lw	$3,40($sp)
	#nop
	lw	$17,20($3)
	lw	$2,12($3)
	lw	$3,0($3)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	#nop
	sll	$2,$2,2
	addu	$18,$17,$2
	sltu	$2,$17,$18
	beq	$2,$0,$L146
	la	$21,$LC3
$L149:
	lhu	$2,2($17)
	lw	$3,0($19)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	lw	$3,20($19)
	move	$5,$17
	sll	$2,$2,2
	addu	$16,$2,$3
	.set	noreorder
	.set	nomacro
	jal	setp_equal
	move	$4,$16
	.set	macro
	.set	reorder

	bne	$2,$0,$L148
	sw	$21,16($sp)
	la	$4,_iob+40
	la	$5,$LC1
	la	$6,$LC2
	.set	noreorder
	.set	nomacro
	jal	fprintf
	li	$7,0x00000031		# 49
	.set	macro
	.set	reorder

	la	$4,_iob+20
	jal	fflush
	jal	abort
$L148:
	lw	$2,0($16)
	#nop
	ori	$2,$2,0x2400
	sw	$2,0($16)
	lw	$2,40($sp)
	#nop
	lw	$2,0($2)
	#nop
	sll	$2,$2,2
	addu	$17,$17,$2
	sltu	$2,$17,$18
	bne	$2,$0,$L149
$L146:
	lw	$4,12($20)
	#nop
	beq	$4,$0,$L151
$L153:
	lw	$3,0($19)
	lw	$2,4($4)
	#nop
	mult	$3,$2
	mflo	$3
	#nop
	lw	$2,20($19)
	sll	$3,$3,2
	addu	$16,$3,$2
	lw	$2,0($16)
	#nop
	ori	$2,$2,0x2000
	sw	$2,0($16)
	lw	$4,16($4)
	#nop
	bne	$4,$0,$L153
$L151:
	lw	$2,debug
	#nop
	andi	$2,$2,0x0020
	beq	$2,$0,$L154
	lw	$2,44($sp)
	lw	$3,48($sp)
	lw	$6,40($sp)
	lw	$7,12($2)
	lw	$8,12($3)
	sw	$7,16($sp)
	lw	$2,12($3)
	#nop
	sw	$2,20($sp)
	lw	$2,4($20)
	#nop
	sw	$2,24($sp)
	lw	$2,12($6)
	lw	$3,4($20)
	sw	$0,32($sp)
	addu	$2,$2,$3
	sw	$2,28($sp)
	lw	$5,12($19)
	lw	$6,12($6)
	la	$4,$LC4
	.set	noreorder
	.set	nomacro
	jal	printf
	addu	$7,$7,$8
	.set	macro
	.set	reorder

$L154:
	lw	$4,40($sp)
	jal	sf_free
	lw	$4,44($sp)
	jal	sf_free
	lw	$4,48($sp)
	jal	sf_free
	.set	noreorder
	.set	nomacro
	jal	sm_free
	move	$4,$22
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	sm_row_free
	move	$4,$20
	.set	macro
	.set	reorder

	lw	$31,84($sp)
	lw	$22,80($sp)
	lw	$21,76($sp)
	lw	$20,72($sp)
	lw	$19,68($sp)
	lw	$18,64($sp)
	lw	$17,60($sp)
	lw	$16,56($sp)
	addu	$sp,$sp,88
	j	$31
	.end	mark_irredundant
	.rdata
	.align	2
$LC5:
	.ascii	"IRRED1: zr=%d ze=%d to-go=%d time=%s\n\000"
	.align	2
$LC6:
	.ascii	"IRRED1: zr=%d zrt=%d to-go=%d time=%s\n\000"
	.text
	.align	2
	.globl	irred_split_cover

	.loc	1 1737
	.ent	irred_split_cover
irred_split_cover:
	.frame	$sp,72,$31		# vars= 8, regs= 10/0, args = 24, extra= 0
	.mask	0xc0ff0000,-4
	.fmask	0x00000000,0
	subu	$sp,$sp,72
	sw	$31,68($sp)
	sw	$fp,64($sp)
	sw	$23,60($sp)
	sw	$22,56($sp)
	sw	$21,52($sp)
	sw	$20,48($sp)
	sw	$19,44($sp)
	sw	$18,40($sp)
	sw	$17,36($sp)
	sw	$16,32($sp)
	move	$18,$4
	sw	$5,24($sp)
	lw	$2,12($18)
	lw	$3,0($18)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	move	$22,$6
	move	$fp,$7
	lw	$19,20($18)
	sll	$2,$2,2
	addu	$21,$19,$2
	sltu	$2,$19,$21
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L157
	move	$4,$0
	.set	macro
	.set	reorder

$L159:
	lhu	$3,0($19)
	sll	$2,$4,16
	or	$2,$2,$3
	sw	$2,0($19)
	lw	$2,0($18)
	#nop
	sll	$2,$2,2
	addu	$19,$19,$2
	sltu	$2,$19,$21
	.set	noreorder
	.set	nomacro
	bne	$2,$0,$L159
	addu	$4,$4,1
	.set	macro
	.set	reorder

$L157:
	la	$16,cube
	lw	$5,0($16)
	.set	noreorder
	.set	nomacro
	jal	sf_new
	li	$4,0x0000000a		# 10
	.set	macro
	.set	reorder

	sw	$2,0($22)
	lw	$5,0($16)
	.set	noreorder
	.set	nomacro
	jal	sf_new
	li	$4,0x0000000a		# 10
	.set	macro
	.set	reorder

	sw	$2,0($fp)
	lw	$5,0($16)
	.set	noreorder
	.set	nomacro
	jal	sf_new
	li	$4,0x0000000a		# 10
	.set	macro
	.set	reorder

	lw	$8,88($sp)
	#nop
	sw	$2,0($8)
	lw	$5,0($16)
	.set	noreorder
	.set	nomacro
	jal	sf_new
	li	$4,0x0000000a		# 10
	.set	macro
	.set	reorder

	lw	$5,24($sp)
	move	$20,$2
	.set	noreorder
	.set	nomacro
	jal	cube2list
	move	$4,$18
	.set	macro
	.set	reorder

	move	$23,$2
	lw	$2,12($18)
	lw	$3,0($18)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	lw	$19,20($18)
	sll	$2,$2,2
	addu	$21,$19,$2
	sltu	$2,$19,$21
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L161
	move	$4,$23
	.set	macro
	.set	reorder

$L182:
	.set	noreorder
	.set	nomacro
	jal	cube_is_covered
	move	$5,$19
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L163
	move	$4,$20
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	sf_addset
	move	$5,$19
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	j	$L164
	move	$20,$2
	.set	macro
	.set	reorder

$L163:
	lw	$4,0($22)
	.set	noreorder
	.set	nomacro
	jal	sf_addset
	move	$5,$19
	.set	macro
	.set	reorder

	sw	$2,0($22)
$L164:
	lw	$2,debug
	#nop
	andi	$2,$2,0x4000
	beq	$2,$0,$L162
	lw	$17,0($22)
	lw	$3,12($20)
	lw	$2,12($17)
	lw	$16,12($18)
	addu	$3,$3,$2
	.set	noreorder
	.set	nomacro
	jal	util_cpu_time
	subu	$16,$16,$3
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	util_print_time
	move	$4,$2
	.set	macro
	.set	reorder

	sw	$2,16($sp)
	lw	$5,12($20)
	lw	$6,12($17)
	la	$4,$LC5
	.set	noreorder
	.set	nomacro
	jal	printf
	move	$7,$16
	.set	macro
	.set	reorder

$L162:
	lw	$2,0($18)
	#nop
	sll	$2,$2,2
	addu	$19,$19,$2
	sltu	$2,$19,$21
	.set	noreorder
	.set	nomacro
	bne	$2,$0,$L182
	move	$4,$23
	.set	macro
	.set	reorder

$L161:
	lw	$4,0($23)
	#nop
	beq	$4,$0,$L168
	jal	free
	sw	$0,0($23)
$L168:
	beq	$23,$0,$L170
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$23
	.set	macro
	.set	reorder

$L170:
	lw	$4,0($22)
	lw	$5,24($sp)
	jal	cube2list
	move	$22,$2
	lw	$2,12($20)
	lw	$3,0($20)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	lw	$19,20($20)
	sll	$2,$2,2
	addu	$21,$19,$2
	sltu	$2,$19,$21
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L172
	move	$4,$22
	.set	macro
	.set	reorder

$L183:
	.set	noreorder
	.set	nomacro
	jal	cube_is_covered
	move	$5,$19
	.set	macro
	.set	reorder

	beq	$2,$0,$L174
	lw	$4,0($fp)
	.set	noreorder
	.set	nomacro
	jal	sf_addset
	move	$5,$19
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	j	$L175
	sw	$2,0($fp)
	.set	macro
	.set	reorder

$L174:
	lw	$8,88($sp)
	#nop
	lw	$4,0($8)
	.set	noreorder
	.set	nomacro
	jal	sf_addset
	move	$5,$19
	.set	macro
	.set	reorder

	lw	$8,88($sp)
	#nop
	sw	$2,0($8)
$L175:
	lw	$2,debug
	#nop
	andi	$2,$2,0x4000
	beq	$2,$0,$L173
	lw	$8,88($sp)
	#nop
	lw	$17,0($8)
	lw	$18,0($fp)
	lw	$3,12($17)
	lw	$2,12($18)
	lw	$16,12($20)
	addu	$3,$3,$2
	.set	noreorder
	.set	nomacro
	jal	util_cpu_time
	subu	$16,$16,$3
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	util_print_time
	move	$4,$2
	.set	macro
	.set	reorder

	sw	$2,16($sp)
	lw	$5,12($17)
	lw	$6,12($18)
	la	$4,$LC6
	.set	noreorder
	.set	nomacro
	jal	printf
	move	$7,$16
	.set	macro
	.set	reorder

$L173:
	lw	$2,0($20)
	#nop
	sll	$2,$2,2
	addu	$19,$19,$2
	sltu	$2,$19,$21
	.set	noreorder
	.set	nomacro
	bne	$2,$0,$L183
	move	$4,$22
	.set	macro
	.set	reorder

$L172:
	lw	$4,0($22)
	#nop
	beq	$4,$0,$L179
	jal	free
	sw	$0,0($22)
$L179:
	beq	$22,$0,$L181
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$22
	.set	macro
	.set	reorder

$L181:
	.set	noreorder
	.set	nomacro
	jal	sf_free
	move	$4,$20
	.set	macro
	.set	reorder

	lw	$31,68($sp)
	lw	$fp,64($sp)
	lw	$23,60($sp)
	lw	$22,56($sp)
	lw	$21,52($sp)
	lw	$20,48($sp)
	lw	$19,44($sp)
	lw	$18,40($sp)
	lw	$17,36($sp)
	lw	$16,32($sp)
	addu	$sp,$sp,72
	j	$31
	.end	irred_split_cover
	.rdata
	.align	2
$LC7:
	.ascii	"IRRED1: %d of %d to-go=%d, table=%dx%d time=%s\n\000"
	.align	2
$LC8:
	.ascii	"IRRED1: delete redundant rows, now %dx%d\n\000"
	.text
	.align	2
	.globl	irred_derive_table

	.loc	1 1800
	.ent	irred_derive_table
irred_derive_table:
	.frame	$sp,72,$31		# vars= 0, regs= 9/0, args = 32, extra= 0
	.mask	0x80ff0000,-8
	.fmask	0x00000000,0
	subu	$sp,$sp,72
	sw	$31,64($sp)
	sw	$23,60($sp)
	sw	$22,56($sp)
	sw	$21,52($sp)
	sw	$20,48($sp)
	sw	$19,44($sp)
	sw	$18,40($sp)
	sw	$17,36($sp)
	sw	$16,32($sp)
	lw	$2,12($4)
	lw	$3,0($4)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	lw	$17,20($4)
	sll	$2,$2,2
	addu	$19,$17,$2
	sltu	$2,$17,$19
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L186
	move	$20,$6
	.set	macro
	.set	reorder

	li	$3,-4097			# 0xffffefff
$L188:
	lw	$2,0($17)
	#nop
	and	$2,$2,$3
	sw	$2,0($17)
	lw	$2,0($4)
	#nop
	sll	$2,$2,2
	addu	$17,$17,$2
	sltu	$2,$17,$19
	bne	$2,$0,$L188
$L186:
	lw	$2,12($5)
	lw	$3,0($5)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	lw	$17,20($5)
	sll	$2,$2,2
	addu	$19,$17,$2
	sltu	$2,$17,$19
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L190
	li	$3,-4097			# 0xffffefff
	.set	macro
	.set	reorder

$L192:
	lw	$2,0($17)
	#nop
	and	$2,$2,$3
	sw	$2,0($17)
	lw	$2,0($5)
	#nop
	sll	$2,$2,2
	addu	$17,$17,$2
	sltu	$2,$17,$19
	bne	$2,$0,$L192
$L190:
	lw	$2,12($20)
	lw	$3,0($20)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	lw	$17,20($20)
	sll	$2,$2,2
	addu	$19,$17,$2
	sltu	$2,$17,$19
	beq	$2,$0,$L194
$L196:
	lw	$2,0($17)
	#nop
	ori	$2,$2,0x1000
	sw	$2,0($17)
	lw	$2,0($20)
	#nop
	sll	$2,$2,2
	addu	$17,$17,$2
	sltu	$2,$17,$19
	bne	$2,$0,$L196
$L194:
	.set	noreorder
	.set	nomacro
	jal	cube3list
	move	$6,$20
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	sm_alloc
	move	$23,$2
	.set	macro
	.set	reorder

	move	$18,$2
	lw	$2,12($20)
	lw	$3,0($20)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	move	$22,$0
	lw	$17,20($20)
	sll	$2,$2,2
	addu	$19,$17,$2
	sltu	$2,$17,$19
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L198
	move	$21,$0
	.set	macro
	.set	reorder

	move	$4,$23
$L208:
	lhu	$2,2($17)
	move	$5,$17
	sw	$2,Rp_current
	.set	noreorder
	.set	nomacro
	jal	fcube_is_covered
	move	$6,$18
	.set	macro
	.set	reorder

	lw	$2,0($17)
	li	$3,-4097			# 0xffffefff
	and	$2,$2,$3
	sw	$2,0($17)
	lw	$2,debug
	#nop
	andi	$2,$2,0x4000
	beq	$2,$0,$L200
	lw	$2,24($18)
	lw	$16,12($20)
	sw	$2,16($sp)
	lw	$2,36($18)
	subu	$16,$16,$21
	.set	noreorder
	.set	nomacro
	jal	util_cpu_time
	sw	$2,20($sp)
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	util_print_time
	move	$4,$2
	.set	macro
	.set	reorder

	sw	$2,24($sp)
	la	$4,$LC7
	lw	$6,12($20)
	move	$5,$21
	.set	noreorder
	.set	nomacro
	jal	printf
	move	$7,$16
	.set	macro
	.set	reorder

$L200:
	lw	$2,24($18)
	#nop
	subu	$2,$2,$22
	slt	$2,$2,1001
	.set	noreorder
	.set	nomacro
	bne	$2,$0,$L201
	addu	$21,$21,1
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	sm_row_dominance
	move	$4,$18
	.set	macro
	.set	reorder

	lw	$2,debug
	lw	$22,24($18)
	andi	$2,$2,0x4000
	beq	$2,$0,$L201
	lw	$6,36($18)
	la	$4,$LC8
	.set	noreorder
	.set	nomacro
	jal	printf
	move	$5,$22
	.set	macro
	.set	reorder

$L201:
	lw	$2,0($20)
	#nop
	sll	$2,$2,2
	addu	$17,$17,$2
	sltu	$2,$17,$19
	.set	noreorder
	.set	nomacro
	bne	$2,$0,$L208
	move	$4,$23
	.set	macro
	.set	reorder

$L198:
	lw	$4,0($23)
	#nop
	beq	$4,$0,$L205
	jal	free
	sw	$0,0($23)
$L205:
	.set	noreorder
	.set	nomacro
	beq	$23,$0,$L209
	move	$2,$18
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$23
	.set	macro
	.set	reorder

	move	$2,$18
$L209:
	lw	$31,64($sp)
	lw	$23,60($sp)
	lw	$22,56($sp)
	lw	$21,52($sp)
	lw	$20,48($sp)
	lw	$19,44($sp)
	lw	$18,40($sp)
	lw	$17,36($sp)
	lw	$16,32($sp)
	addu	$sp,$sp,72
	j	$31
	.end	irred_derive_table
	.align	2
	.globl	cube_is_covered

	.loc	1 1852
	.ent	cube_is_covered
cube_is_covered:
	.frame	$sp,24,$31		# vars= 0, regs= 1/0, args = 16, extra= 0
	.mask	0x80000000,-8
	.fmask	0x00000000,0
	subu	$sp,$sp,24
	sw	$31,16($sp)
	jal	cofactor
	.set	noreorder
	.set	nomacro
	jal	tautology
	move	$4,$2
	.set	macro
	.set	reorder

	lw	$31,16($sp)
	addu	$sp,$sp,24
	j	$31
	.end	cube_is_covered
	.sdata
	.align	2
taut_level.14:
	.word	0
	.rdata
	.align	2
$LC9:
	.ascii	"TAUTOLOGY\000"
	.align	2
$LC10:
	.ascii	"exit TAUTOLOGY[%d]: %s\n\000"
	.sdata
	.align	2
$LC11:
	.ascii	"TRUE\000"
	.align	2
$LC12:
	.ascii	"MAYBE\000"
	.align	2
$LC13:
	.ascii	"FALSE\000"
	.text
	.align	2
	.globl	tautology

	.loc	1 1862
	.ent	tautology
tautology:
	.frame	$sp,64,$31		# vars= 16, regs= 8/0, args = 16, extra= 0
	.mask	0x807f0000,-4
	.fmask	0x00000000,0
	lw	$2,debug
	subu	$sp,$sp,64
	sw	$31,60($sp)
	sw	$22,56($sp)
	sw	$21,52($sp)
	sw	$20,48($sp)
	sw	$19,44($sp)
	sw	$18,40($sp)
	sw	$17,36($sp)
	sw	$16,32($sp)
	andi	$2,$2,0x0200
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L212
	move	$21,$4
	.set	macro
	.set	reorder

	lw	$6,taut_level.14
	la	$5,$LC9
	addu	$2,$6,1
	sw	$2,taut_level.14
	jal	debug_print
$L212:
	lw	$2,cube+44
	lw	$16,8($21)
	lw	$20,0($2)
	lw	$22,4($2)
	move	$19,$21
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L224
	addu	$17,$21,12
	.set	macro
	.set	reorder

	move	$19,$0 		/*++++++++++++++++++++++++++++++++*/
$L223:
	lw	$5,0($19)	/*++++++++++++++++++++++++++++++++*/
	.set	noreorder
	.set	nomacro
	jal	full_row
	move	$4,$16
	.set	macro
	.set	reorder

	bne	$2,$0,$L301
	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L223
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L224:
	lw	$2,0($19)
	#nop
	lw	$2,0($2)
	#nop
	andi	$5,$2,0x03ff
$L225:
	lw	$2,0($19)
	sll	$3,$5,2
	addu	$4,$3,$20
	addu	$3,$3,$2
	lw	$2,0($3)
	subu	$5,$5,1
	.set	noreorder
	.set	nomacro
	bgez	$5,$L225
	sw	$2,0($4)
	.set	macro
	.set	reorder

	lw	$16,8($19)
	#nop
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L229
	addu	$17,$19,12
	.set	macro
	.set	reorder

	li	$6,-1024			# 0xfffffc00
$L234:
	lw	$2,0($20)
	#nop
	andi	$5,$2,0x03ff
	and	$2,$2,$6
	or	$2,$5,$2
	sw	$2,0($20)
$L231:
	sll	$3,$5,2
	addu	$4,$3,$20
	addu	$3,$3,$16
	lw	$2,0($4)
	lw	$3,0($3)
	subu	$5,$5,1
	or	$2,$2,$3
	.set	noreorder
	.set	nomacro
	bgtz	$5,$L231
	sw	$2,0($4)
	.set	macro
	.set	reorder

	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L234
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L229:
	lw	$5,cube+48
	.set	noreorder
	.set	nomacro
	jal	setp_equal
	move	$4,$20
	.set	macro
	.set	reorder

	beq	$2,$0,$L300
	.set	noreorder
	.set	nomacro
	jal	massive_count
	move	$4,$19
	.set	macro
	.set	reorder

	lw	$3,cdata+20
	lw	$2,cdata+16
	#nop
	.set	noreorder
	.set	nomacro
	bne	$3,$2,$L240
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

$L300:
	lw	$4,0($19)
	#nop
	beq	$4,$0,$L242
	jal	free
	sw	$0,0($19)
$L242:
	.set	noreorder
	.set	nomacro
	beq	$19,$0,$L244
	move	$16,$0
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

$L244:
	.set	noreorder
	.set	nomacro
	j	$L302
	li	$2,0x00000002		# 2
	.set	macro
	.set	reorder

$L240:
	lw	$3,cdata+16
	#nop
	bne	$3,$2,$L246
$L301:
	lw	$4,0($19)
	#nop
	beq	$4,$0,$L248
	jal	free
	sw	$0,0($19)
$L248:
	.set	noreorder
	.set	nomacro
	beq	$19,$0,$L214
	li	$16,0x00000001		# 1
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	j	$L214
	li	$16,0x00000001		# 1
	.set	macro
	.set	reorder

$L246:
	lw	$2,cdata+20
	#nop
	beq	$2,$0,$L252
	lw	$5,cube+52
	.set	noreorder
	.set	nomacro
	jal	set_copy
	move	$4,$20
	.set	macro
	.set	reorder

	lw	$2,cube+4
	#nop
	.set	noreorder
	.set	nomacro
	blez	$2,$L254
	move	$6,$0
	.set	macro
	.set	reorder

	li	$8,-1024			# 0xfffffc00
$L260:
	lw	$2,cdata+12
	sll	$3,$6,2
	addu	$3,$3,$2
	lw	$2,0($3)
	#nop
	beq	$2,$0,$L255
	lw	$2,0($20)
	sll	$7,$6,2
	andi	$5,$2,0x03ff
	and	$2,$2,$8
	or	$2,$5,$2
	sw	$2,0($20)
$L257:
	lw	$2,cube+40
	#nop
	addu	$2,$7,$2
	lw	$2,0($2)
	sll	$3,$5,2
	addu	$4,$3,$20
	addu	$3,$3,$2
	lw	$2,0($4)
	lw	$3,0($3)
	subu	$5,$5,1
	or	$2,$2,$3
	.set	noreorder
	.set	nomacro
	bgtz	$5,$L257
	sw	$2,0($4)
	.set	macro
	.set	reorder

$L255:
	lw	$2,cube+4
	addu	$6,$6,1
	slt	$2,$6,$2
	bne	$2,$0,$L260
$L254:
	lw	$16,8($19)
	addu	$18,$19,8
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L262
	addu	$17,$19,12
	.set	macro
	.set	reorder

$L265:
	lw	$6,0($19)
	move	$4,$22
	.set	noreorder
	.set	nomacro
	jal	set_or
	move	$5,$16
	.set	macro
	.set	reorder

	move	$4,$20
	.set	noreorder
	.set	nomacro
	jal	setp_implies
	move	$5,$2
	.set	macro
	.set	reorder

	beq	$2,$0,$L261
	sw	$16,0($18)
	addu	$18,$18,4
$L261:
	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L265
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L262:
	sw	$0,0($18)
	lw	$2,debug
	addu	$18,$18,4
	andi	$2,$2,0x0200
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L224
	sw	$18,4($19)
	.set	macro
	.set	reorder

	subu	$6,$18,$19
	sra	$6,$6,2
	lw	$5,cdata+20
	la	$4,$LC0
	.set	noreorder
	.set	nomacro
	jal	printf
	subu	$6,$6,3
	.set	macro
	.set	reorder

	j	$L224
$L252:
	lw	$4,cdata+24
	lw	$2,cdata+4
	sll	$4,$4,2
	addu	$4,$4,$2
	lw	$2,4($19)
	#nop
	subu	$2,$2,$19
	sra	$2,$2,2
	subu	$2,$2,3
	srl	$3,$2,31
	addu	$2,$2,$3
	lw	$3,0($4)
	sra	$2,$2,1
	slt	$3,$3,$2
	.set	noreorder
	.set	nomacro
	beq	$3,$0,$L245
	move	$4,$19
	.set	macro
	.set	reorder

	lw	$7,debug
	addu	$5,$sp,16
	addu	$6,$sp,20
	.set	noreorder
	.set	nomacro
	jal	cubelist_partition
	andi	$7,$7,0x0200
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L214
	li	$16,0x00000002		# 2
	.set	macro
	.set	reorder

	lw	$4,0($19)
	#nop
	beq	$4,$0,$L272
	jal	free
	sw	$0,0($19)
$L272:
	beq	$19,$0,$L274
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

$L274:
	lw	$4,16($sp)
	jal	tautology
	beq	$2,$0,$L275
	lw	$2,20($sp)
	#nop
	lw	$4,0($2)
	#nop
	beq	$4,$0,$L277
	jal	free
	lw	$2,20($sp)
	#nop
	sw	$0,0($2)
$L277:
	lw	$4,20($sp)
	#nop
	.set	noreorder
	.set	nomacro
	beq	$4,$0,$L214
	li	$16,0x00000001		# 1
	.set	macro
	.set	reorder

	jal	free
	.set	noreorder
	.set	nomacro
	j	$L214
	sw	$0,20($sp)
	.set	macro
	.set	reorder

$L275:
	lw	$4,20($sp)
	jal	tautology
	.set	noreorder
	.set	nomacro
	j	$L214
	move	$16,$2
	.set	macro
	.set	reorder

$L245:
	li	$16,0x00000002		# 2
$L214:
	li	$2,0x00000002		# 2
$L302:
	bne	$16,$2,$L213
	lw	$2,cube
	#nop
	slt	$2,$2,33
	bne	$2,$0,$L281
	lw	$2,cube
	#nop
	subu	$4,$2,1
	sra	$4,$4,5
	addu	$4,$4,2
	.set	noreorder
	.set	nomacro
	j	$L282
	sll	$4,$4,2
	.set	macro
	.set	reorder

$L281:
	li	$4,0x00000008		# 8
$L282:
	jal	malloc
	la	$16,cube
	lw	$5,0($16)
	.set	noreorder
	.set	nomacro
	jal	set_clear
	move	$4,$2
	.set	macro
	.set	reorder

	move	$19,$2
	lw	$2,0($16)
	#nop
	slt	$2,$2,33
	bne	$2,$0,$L283
	lw	$2,cube
	#nop
	subu	$4,$2,1
	sra	$4,$4,5
	addu	$4,$4,2
	.set	noreorder
	.set	nomacro
	j	$L284
	sll	$4,$4,2
	.set	macro
	.set	reorder

$L283:
	li	$4,0x00000008		# 8
$L284:
	.set	noreorder
	.set	nomacro
	jal	malloc
	move	$16,$0
	.set	macro
	.set	reorder

	lw	$5,cube
	.set	noreorder
	.set	nomacro
	jal	set_clear
	move	$4,$2
	.set	macro
	.set	reorder

	move	$17,$2
	move	$4,$21
	move	$5,$19
	move	$6,$17
	.set	noreorder
	.set	nomacro
	jal	binate_split_select
	li	$7,0x00000200		# 512
	.set	macro
	.set	reorder

	move	$18,$2
	move	$4,$21
	move	$5,$19
	.set	noreorder
	.set	nomacro
	jal	scofactor
	move	$6,$18
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	tautology
	move	$4,$2
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L285
	move	$4,$21
	.set	macro
	.set	reorder

	move	$5,$17
	.set	noreorder
	.set	nomacro
	jal	scofactor
	move	$6,$18
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	tautology
	move	$4,$2
	.set	macro
	.set	reorder

	sltu	$16,$0,$2
$L285:
	lw	$4,0($21)
	#nop
	beq	$4,$0,$L287
	jal	free
	sw	$0,0($21)
$L287:
	beq	$21,$0,$L289
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$21
	.set	macro
	.set	reorder

$L289:
	beq	$19,$0,$L291
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

$L291:
	beq	$17,$0,$L213
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$17
	.set	macro
	.set	reorder

$L213:
	lw	$2,debug
	#nop
	andi	$2,$2,0x0200
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L303
	move	$2,$16
	.set	macro
	.set	reorder

	lw	$2,taut_level.14
	#nop
	subu	$2,$2,1
	sw	$2,taut_level.14
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L295
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

	la	$6,$LC12
	bne	$16,$2,$L296
	la	$6,$LC11
	j	$L296
$L295:
	la	$6,$LC13
$L296:
	lw	$5,taut_level.14
	la	$4,$LC10
	jal	printf
	move	$2,$16
$L303:
	lw	$31,60($sp)
	lw	$22,56($sp)
	lw	$21,52($sp)
	lw	$20,48($sp)
	lw	$19,44($sp)
	lw	$18,40($sp)
	lw	$17,36($sp)
	lw	$16,32($sp)
	addu	$sp,$sp,64
	j	$31
	.end	tautology
	.align	2

	.loc	1 1896
	.ent	fcube_is_covered
fcube_is_covered:
	.frame	$sp,24,$31		# vars= 0, regs= 2/0, args = 16, extra= 0
	.mask	0x80010000,-4
	.fmask	0x00000000,0
	subu	$sp,$sp,24
	sw	$31,20($sp)
	sw	$16,16($sp)
	.set	noreorder
	.set	nomacro
	jal	cofactor
	move	$16,$6
	.set	macro
	.set	reorder

	move	$4,$2
	.set	noreorder
	.set	nomacro
	jal	ftautology
	move	$5,$16
	.set	macro
	.set	reorder

	lw	$31,20($sp)
	lw	$16,16($sp)
	addu	$sp,$sp,24
	j	$31
	.end	fcube_is_covered
	.sdata
	.align	2
ftaut_level.19:
	.word	0
	.rdata
	.align	2
$LC14:
	.ascii	"FIND_TAUTOLOGY\000"
	.align	2
$LC15:
	.ascii	"exit FIND_TAUTOLOGY[%d]: table is %d by %d\n\000"
	.text
	.align	2

	.loc	1 1906
	.ent	ftautology
ftautology:
	.frame	$sp,40,$31		# vars= 0, regs= 6/0, args = 16, extra= 0
	.mask	0x801f0000,-4
	.fmask	0x00000000,0
	subu	$sp,$sp,40
	sw	$31,36($sp)
	sw	$20,32($sp)
	sw	$19,28($sp)
	sw	$18,24($sp)
	sw	$17,20($sp)
	sw	$16,16($sp)
	lw	$2,debug
	move	$17,$4
	andi	$2,$2,0x0200
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L306
	move	$20,$5
	.set	macro
	.set	reorder

	lw	$6,ftaut_level.19
	la	$5,$LC14
	addu	$2,$6,1
	sw	$2,ftaut_level.19
	jal	debug_print
$L306:
	move	$4,$17
	.set	noreorder
	.set	nomacro
	jal	ftaut_special_cases
	move	$5,$20
	.set	macro
	.set	reorder

	li	$3,0x00000002		# 2
	bne	$2,$3,$L307
	lw	$2,cube
	#nop
	slt	$2,$2,33
	bne	$2,$0,$L308
	lw	$2,cube
	#nop
	subu	$4,$2,1
	sra	$4,$4,5
	addu	$4,$4,2
	.set	noreorder
	.set	nomacro
	j	$L309
	sll	$4,$4,2
	.set	macro
	.set	reorder

$L308:
	li	$4,0x00000008		# 8
$L309:
	jal	malloc
	la	$16,cube
	lw	$5,0($16)
	.set	noreorder
	.set	nomacro
	jal	set_clear
	move	$4,$2
	.set	macro
	.set	reorder

	move	$19,$2
	lw	$2,0($16)
	#nop
	slt	$2,$2,33
	bne	$2,$0,$L310
	lw	$2,cube
	#nop
	subu	$4,$2,1
	sra	$4,$4,5
	addu	$4,$4,2
	.set	noreorder
	.set	nomacro
	j	$L311
	sll	$4,$4,2
	.set	macro
	.set	reorder

$L310:
	li	$4,0x00000008		# 8
$L311:
	jal	malloc
	lw	$5,cube
	.set	noreorder
	.set	nomacro
	jal	set_clear
	move	$4,$2
	.set	macro
	.set	reorder

	move	$18,$2
	move	$4,$17
	move	$5,$19
	move	$6,$18
	.set	noreorder
	.set	nomacro
	jal	binate_split_select
	li	$7,0x00000200		# 512
	.set	macro
	.set	reorder

	move	$16,$2
	move	$4,$17
	move	$5,$19
	.set	noreorder
	.set	nomacro
	jal	scofactor
	move	$6,$16
	.set	macro
	.set	reorder

	move	$4,$2
	.set	noreorder
	.set	nomacro
	jal	ftautology
	move	$5,$20
	.set	macro
	.set	reorder

	move	$4,$17
	move	$5,$18
	.set	noreorder
	.set	nomacro
	jal	scofactor
	move	$6,$16
	.set	macro
	.set	reorder

	move	$4,$2
	.set	noreorder
	.set	nomacro
	jal	ftautology
	move	$5,$20
	.set	macro
	.set	reorder

	lw	$4,0($17)
	#nop
	beq	$4,$0,$L313
	jal	free
	sw	$0,0($17)
$L313:
	beq	$17,$0,$L315
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$17
	.set	macro
	.set	reorder

$L315:
	beq	$19,$0,$L317
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

$L317:
	beq	$18,$0,$L307
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$18
	.set	macro
	.set	reorder

$L307:
	lw	$2,debug
	#nop
	andi	$2,$2,0x0200
	beq	$2,$0,$L320
	lw	$5,ftaut_level.19
	lw	$6,24($20)
	lw	$7,36($20)
	la	$4,$LC15
	subu	$5,$5,1
	sw	$5,ftaut_level.19
	jal	printf
$L320:
	lw	$31,36($sp)
	lw	$20,32($sp)
	lw	$19,28($sp)
	lw	$18,24($sp)
	lw	$17,20($sp)
	lw	$16,16($sp)
	addu	$sp,$sp,40
	j	$31
	.end	ftautology
	.align	2

	.loc	1 1938
	.ent	ftaut_special_cases
ftaut_special_cases:
	.frame	$sp,56,$31		# vars= 8, regs= 8/0, args = 16, extra= 0
	.mask	0x807f0000,-4
	.fmask	0x00000000,0
	subu	$sp,$sp,56
	sw	$31,52($sp)
	sw	$22,48($sp)
	sw	$21,44($sp)
	sw	$20,40($sp)
	sw	$19,36($sp)
	sw	$18,32($sp)
	sw	$17,28($sp)
	sw	$16,24($sp)
	lw	$2,cube+44
	move	$19,$4
	lw	$16,8($19)
	lw	$22,0($2)
	lw	$20,4($2)
	move	$21,$5
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L332
	addu	$17,$19,12
	.set	macro
	.set	reorder

$L331:
	lw	$2,0($16)
	#nop
	andi	$2,$2,0x1000
	bne	$2,$0,$L322
	lw	$5,0($19)
	.set	noreorder
	.set	nomacro
	jal	full_row
	move	$4,$16
	.set	macro
	.set	reorder

	bne	$2,$0,$L337
$L322:
	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L331
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L332:
	.set	noreorder
	.set	nomacro
	jal	massive_count
	move	$4,$19
	.set	macro
	.set	reorder

	la	$2,cdata+20
	lw	$3,0($2)
	lw	$2,-4($2)
	#nop
	bne	$3,$2,$L333
	lw	$2,20($21)
	#nop
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L335
	move	$18,$0
	.set	macro
	.set	reorder

	lw	$2,0($2)
	#nop
	addu	$18,$2,1
$L335:
	lw	$6,Rp_current
	move	$4,$21
	.set	noreorder
	.set	nomacro
	jal	sm_insert
	move	$5,$18
	.set	macro
	.set	reorder

	lw	$16,8($19)
	#nop
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L337
	addu	$17,$19,12
	.set	macro
	.set	reorder

$L341:
	lw	$2,0($16)
	#nop
	andi	$2,$2,0x1000
	beq	$2,$0,$L336
	lw	$5,0($19)
	.set	noreorder
	.set	nomacro
	jal	full_row
	move	$4,$16
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L336
	move	$4,$21
	.set	macro
	.set	reorder

	lhu	$6,2($16)
	.set	noreorder
	.set	nomacro
	jal	sm_insert
	move	$5,$18
	.set	macro
	.set	reorder

$L336:
	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L341
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L337:
	lw	$4,0($19)
	#nop
	beq	$4,$0,$L343
	jal	free
	sw	$0,0($19)
$L343:
	.set	noreorder
	.set	nomacro
	beq	$19,$0,$L362
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	j	$L362
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

$L333:
	lw	$2,cdata+20
	#nop
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L362
	li	$2,0x00000002		# 2
	.set	macro
	.set	reorder

	la	$16,cube+52
	lw	$5,0($16)
	.set	noreorder
	.set	nomacro
	jal	set_copy
	move	$4,$20
	.set	macro
	.set	reorder

	lw	$2,-48($16)
	#nop
	.set	noreorder
	.set	nomacro
	blez	$2,$L349
	move	$6,$0
	.set	macro
	.set	reorder

	li	$9,-1024			# 0xfffffc00
	la	$8,cube+4
$L355:
	lw	$2,cdata+12
	sll	$3,$6,2
	addu	$3,$3,$2
	lw	$2,0($3)
	#nop
	beq	$2,$0,$L350
	lw	$2,0($20)
	sll	$7,$6,2
	andi	$5,$2,0x03ff
	and	$2,$2,$9
	or	$2,$5,$2
	sw	$2,0($20)
$L352:
	lw	$2,cube+40
	#nop
	addu	$2,$7,$2
	lw	$2,0($2)
	sll	$3,$5,2
	addu	$4,$3,$20
	addu	$3,$3,$2
	lw	$2,0($4)
	lw	$3,0($3)
	subu	$5,$5,1
	or	$2,$2,$3
	.set	noreorder
	.set	nomacro
	bgtz	$5,$L352
	sw	$2,0($4)
	.set	macro
	.set	reorder

$L350:
	lw	$2,0($8)
	addu	$6,$6,1
	slt	$2,$6,$2
	bne	$2,$0,$L355
$L349:
	lw	$16,8($19)
	addu	$18,$19,8
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L357
	addu	$17,$19,12
	.set	macro
	.set	reorder

$L360:
	lw	$6,0($19)
	move	$4,$22
	.set	noreorder
	.set	nomacro
	jal	set_or
	move	$5,$16
	.set	macro
	.set	reorder

	move	$4,$20
	.set	noreorder
	.set	nomacro
	jal	setp_implies
	move	$5,$2
	.set	macro
	.set	reorder

	beq	$2,$0,$L356
	sw	$16,0($18)
	addu	$18,$18,4
$L356:
	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L360
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L357:
	sw	$0,0($18)
	lw	$2,debug
	addu	$18,$18,4
	andi	$2,$2,0x0200
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L332
	sw	$18,4($19)
	.set	macro
	.set	reorder

	subu	$6,$18,$19
	sra	$6,$6,2
	lw	$5,cdata+20
	la	$4,$LC0
	.set	noreorder
	.set	nomacro
	jal	printf
	subu	$6,$6,3
	.set	macro
	.set	reorder

	j	$L332
$L362:
	lw	$31,52($sp)
	lw	$22,48($sp)
	lw	$21,44($sp)
	lw	$20,40($sp)
	lw	$19,36($sp)
	lw	$18,32($sp)
	lw	$17,28($sp)
	lw	$16,24($sp)
	addu	$sp,$sp,56
	j	$31
	.end	ftaut_special_cases

	.lcomm	Rp_current,8
--------------------------------------------------------------------


command line arguments : -O


tm.h : DECstation ULTRIX version  md : MIPS.md

Machine DECstation 3100

OS ULTRIX V4.2A (REv. 272) 
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads