|
|
|
@ -570,16 +570,12 @@ static void move_inputs(struct gate_data *curr, struct gate_data *prev) |
|
|
|
prev->finished = TRUE; |
|
|
|
} |
|
|
|
|
|
|
|
static void scan_gates(DSTRING *lhs) |
|
|
|
static void scan_gates(DSTRING *lhs, int optimize) |
|
|
|
{ |
|
|
|
struct gate_data *current = NULL, *previous = NULL, *last_curr = NULL; |
|
|
|
struct gate_data *prev = NULL; |
|
|
|
int ps_scan_gates_noopt = 0; |
|
|
|
|
|
|
|
if (!cp_getvar("ps_scan_gates_noopt", CP_NUM, &ps_scan_gates_noopt, 0)) { |
|
|
|
ps_scan_gates_noopt = 0; |
|
|
|
} |
|
|
|
if (ps_scan_gates_noopt) { |
|
|
|
if (optimize < 1) { |
|
|
|
current = last_gate; |
|
|
|
if (ds_get_length(lhs) > 0) { |
|
|
|
assert(current->finished == FALSE); |
|
|
|
@ -982,7 +978,7 @@ err_return: |
|
|
|
/* Start of logicexp parser */ |
|
|
|
static void aerror(char *s); |
|
|
|
static BOOL amatch(int t); |
|
|
|
static BOOL bparse(char *line, BOOL new_lexer); |
|
|
|
static BOOL bparse(char *line, BOOL new_lexer, int optimize); |
|
|
|
|
|
|
|
static int lookahead = 0; |
|
|
|
static int number_of_instances = 0; |
|
|
|
@ -1077,7 +1073,7 @@ static BOOL amatch(int t) |
|
|
|
return TRUE; |
|
|
|
} |
|
|
|
|
|
|
|
static BOOL bstmt_postfix(void) |
|
|
|
static BOOL bstmt_postfix(int optimize) |
|
|
|
{ |
|
|
|
/* A stmt is: output_name_id = '{' expr '}' */ |
|
|
|
DS_CREATE(lhs, 32); |
|
|
|
@ -1129,7 +1125,7 @@ static BOOL bstmt_postfix(void) |
|
|
|
retval = FALSE; |
|
|
|
goto bail_out; |
|
|
|
} |
|
|
|
scan_gates(&lhs); |
|
|
|
scan_gates(&lhs, optimize); |
|
|
|
gen_scanned_gates(first_gate); |
|
|
|
lookahead = lex_scan(); |
|
|
|
while (lookahead != '}') { |
|
|
|
@ -1172,7 +1168,7 @@ static char *get_logicexp_tmodel_delays( |
|
|
|
return ds_get_buf(mname); |
|
|
|
} |
|
|
|
|
|
|
|
static BOOL bparse(char *line, BOOL new_lexer) |
|
|
|
static BOOL bparse(char *line, BOOL new_lexer, int optimize) |
|
|
|
{ |
|
|
|
BOOL ret_val = TRUE; |
|
|
|
DS_CREATE(stmt, LEX_BUF_SZ); |
|
|
|
@ -1187,7 +1183,7 @@ static BOOL bparse(char *line, BOOL new_lexer) |
|
|
|
while (lookahead != '\0') { |
|
|
|
ds_clear(&stmt); |
|
|
|
ds_cat_str(&stmt, parse_lexer->lexer_buf); |
|
|
|
if (!bstmt_postfix()) { |
|
|
|
if (!bstmt_postfix(optimize)) { |
|
|
|
cleanup_parser(); |
|
|
|
ret_val= FALSE; |
|
|
|
break; |
|
|
|
@ -1249,8 +1245,9 @@ static BOOL expect_token( |
|
|
|
return TRUE; |
|
|
|
} |
|
|
|
|
|
|
|
BOOL f_logicexp(char *line) |
|
|
|
BOOL f_logicexp(char *line, int optimize) |
|
|
|
{ |
|
|
|
/* If optimize > 0 then perform optimizations in scan_gates */ |
|
|
|
int t, num_ins = 0, num_outs = 0, i; |
|
|
|
char *endp; |
|
|
|
BOOL ret_val = TRUE; |
|
|
|
@ -1335,7 +1332,7 @@ BOOL f_logicexp(char *line) |
|
|
|
} |
|
|
|
(void) add_sym_tab_entry(parse_lexer->lexer_buf, |
|
|
|
SYM_TMODEL, &parse_lexer->lexer_sym_tab); |
|
|
|
ret_val = bparse(line, FALSE); |
|
|
|
ret_val = bparse(line, FALSE, optimize); |
|
|
|
|
|
|
|
current_lexer = NULL; |
|
|
|
if (!ret_val) { |
|
|
|
|