Thread View: gnu.gcc.bug
1 messages
1 total messages
Started by T.N. Vijaykumar.
Mon, 09 Nov 1992 17:47
Inlining bug
Author: T.N. Vijaykumar.
Date: Mon, 09 Nov 1992 17:47
Date: Mon, 09 Nov 1992 17:47
3667 lines
68159 bytes
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