ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
cubehack.c
Go to the documentation of this file.
1/*
2 * Revision Control Information
3 *
4 * $Source: /vol/opua/opua2/sis/sis-1.1/common/src/sis/node/RCS/cubehack.c,v $
5 * $Author: sis $
6 * $Revision: 1.2 $
7 * $Date: 1992/05/06 18:57:41 $
8 *
9 */
10/*
11#include "sis.h"
12#include "node_int.h"
13
14#ifdef lint
15struct cube_struct cube;
16bool summary;
17bool trace;
18bool remove_essential;
19bool force_irredundant;
20bool unwrap_onset;
21bool single_expand;
22bool pos;
23bool recompute_onset;
24bool use_super_gasp;
25bool use_random_order;
26#endif
27*/
28#include "espresso.h"
29
31
32
33
34void
36int n;
37{
38 if (cube.fullset != 0 && cube.num_binary_vars == n)
39 return;
40 if (cube.fullset != 0) {
42 FREE(cube.part_size);
43 }
44 cube.num_binary_vars = cube.num_vars = n;
45 cube.part_size = ALLOC(int, n);
46 cube_setup();
47}
48
49
50void
52int n;
53{
54 register int q, i;
55 static int called_before = 0;
56
57 /* check if the cube is already just the right size */
58 if (cube.fullset != 0 && cube.num_binary_vars == n && cube.num_vars == n)
59 return;
60
61 /* We can't handle more than 100 inputs */
62 if (n > 100) {
64 called_before = 0;
65 return;
66 }
67
68 if (cube.fullset == 0 || ! called_before) {
70 called_before = 1;
71 }
72
73 cube.num_vars = n;
74 cube.num_binary_vars = n;
75 cube.num_mv_vars = 0;
76 cube.output = -1;
77 cube.size = n * 2;
78
79 /* first_part, last_part, first_word, last_word, part_size OKAY */
80 /* cube.sparse is OKAY */
81
82 /* need to completely re-make cube.fullset and cube.binary_mask */
83 (void) set_fill(cube.fullset, n*2);
84 (void) set_fill(cube.binary_mask, n*2);
85
86 /* need to resize each set in cube.var_mask and cube.temp */
87 q = cube.fullset[0];
88 for(i = 0; i < cube.num_vars; i++)
89 cube.var_mask[i][0] = q;
90 for(i = 0; i < CUBE_TEMP; i++)
91 cube.temp[i][0] = q;
92
93 /* need to resize cube.emptyset and cube.mv_mask */
94 cube.emptyset[0] = q;
95 cube.mv_mask[0] = q;
96
97 /* need to reset the inword and inmask */
98 if (cube.num_binary_vars != 0) {
99 cube.inword = cube.last_word[cube.num_binary_vars - 1];
100 cube.inmask = cube.binary_mask[cube.inword] & DISJOINT;
101 } else {
102 cube.inword = -1;
103 cube.inmask = 0;
104 }
105
106 /* cdata (entire structure) is OKAY */
107}
108
109
110void
112{
113 if (cube.num_binary_vars > 100) {
114 if (cube.fullset != 0) {
115 setdown_cube();
116 FREE(cube.part_size);
117 }
118 } else {
119 cube.num_vars = cube.num_binary_vars = 100;
120 if (cube.fullset != 0) {
121 setdown_cube();
122 FREE(cube.part_size);
123 }
124 }
125}
126
127
128void
143
#define TRUE
Definition abcBm.c:38
#define FALSE
Definition abcBm.c:37
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define ALLOC(type, num)
Definition avl.h:27
#define FREE(obj)
Definition avl.h:31
void set_espresso_flags()
Definition cubehack.c:129
ABC_NAMESPACE_IMPL_START void cautious_define_cube_size(int n)
Definition cubehack.c:35
void undefine_cube_size()
Definition cubehack.c:111
void define_cube_size(int n)
Definition cubehack.c:51
void setdown_cube()
Definition cubestr.c:95
ABC_NAMESPACE_IMPL_START void cube_setup()
Definition cubestr.c:27
#define DISJOINT
Definition espresso.h:514
#define CUBE_TEMP
Definition espresso.h:469
bool recompute_onset
Definition globals.c:32
bool single_expand
Definition globals.c:34
bool trace
Definition globals.c:36
pset set_fill()
bool summary
Definition globals.c:35
bool remove_essential
Definition globals.c:33
bool use_super_gasp
Definition globals.c:39
bool force_irredundant
Definition globals.c:27
bool use_random_order
Definition globals.c:38
bool pos
Definition globals.c:30
bool unwrap_onset
Definition globals.c:37
Definition exor.h:123