92 char *s = (
char*) NULL;
93 char *nm = (
char*) NULL;
104 (void) strcpy(v1, nm);
109 (void) strcpy(v3,
Var_List[v].name1);
115 (void) fprintf(
STDOUT,
" %s_delay[pnode_%s_ptr] = %s;\n", v1, nm, v2);
116 (void) fprintf(
STDOUT,
" pnode_%s_ptr++;\n", nm);
117 (void) fprintf(
STDOUT,
" if ( %s <= pnode_%s_ptr ) {\n", v3, nm);
118 (void) fprintf(
STDOUT,
" pnode_%s_ptr = 0L;\n", nm);
119 (void) fprintf(
STDOUT,
" }\n");
120 (void) fprintf(
STDOUT,
" %s = %s_delay[pnode_%s_ptr];\n", v1, v1, nm);
121 if ((w1 == w2) && (0 != strcmp(sgn,
"-"))) {
125 if (1 != sscanf(tok,
"%li", &ndel)) {
127 (void) fprintf(
STDERR,
" the number of delays is not a well-formed positive C long integer <%s>\n", tok);
134 (void) fprintf(
STDOUT,
" %s_delay[pnode_%s_ptr] = %s;\n", v1, nm, v2);
135 (void) fprintf(
STDOUT,
" pnode_%s_ptr++;\n", nm);
136 (void) fprintf(
STDOUT,
" if ( %ldL <= pnode_%s_ptr ) {\n", ndel, nm);
137 (void) fprintf(
STDOUT,
" pnode_%s_ptr = 0L;\n", nm);
138 (void) fprintf(
STDOUT,
" }\n");
139 (void) fprintf(
STDOUT,
" %s = %s_delay[pnode_%s_ptr];\n", v1, v1, nm);
140 if ((w1 == w2) && (0 != strcmp(sgn,
"-"))) {
149 char *s = (
char*) NULL;
152 char sgn[2] = {
'\0'};
162 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v1);
163 if ((w1 == w2) && (0 != strcmp(sgn,
"-"))) {
171 char *s = (
char*) NULL;
174 char sgn[2] = {
'\0'};
184 (void) fprintf(
STDOUT,
" %s = %s_delay;\n", v0, v0);
185 (void) fprintf(
STDOUT,
" %s_delay = %s;\n", v0, v1);
186 if ((w1 == w2) && (0 != strcmp(sgn,
"-"))) {
194 char *s = (
char*) NULL;
197 char sgn[2] = {
'\0'};
207 (void) fprintf(
STDOUT,
" %s = %s_delay[1];\n", v0, v0);
208 (void) fprintf(
STDOUT,
" %s_delay[1] = %s_delay[0];\n", v0, v0);
209 (void) fprintf(
STDOUT,
" %s_delay[0] = %s;\n", v0, v1);
210 if ((w1 == w2) && (0 != strcmp(sgn,
"-"))) {
221 (void) fprintf(
STDOUT,
" %s = %s_dc;\n", v0, v0);
227 char *s = (
char*) NULL;
228 char *nm = (
char*) NULL;
231 char sgn[2] = {
'\0'};
234 (void) strcpy(v1, nm);
238 if (0 == strcmp(sgn,
"-")) {
239 (void) fprintf(
STDOUT,
" %s = -%s - %s_delay;\n", v1, v2, v1);
241 (void) fprintf(
STDOUT,
" %s = %s - %s_delay;\n", v1, v2, v1);
243 (void) fprintf(
STDOUT,
" %s_delay = %s;\n", v1, v2);
250 char *s = (
char*) NULL;
251 char *nm = (
char*) NULL;
254 char sgn[2] = {
'\0'};
257 (void) strcpy(v1, nm);
261 if (0 == strcmp(sgn,
"-")) {
262 (void) fprintf(
STDOUT,
" %s -= %s;\n", v1, v2);
264 (void) fprintf(
STDOUT,
" %s += %s;\n", v1, v2);
271 char *s = (
char*) NULL;
278 char sgn[2] = {
'\0'};
293 (void) fprintf(
STDOUT,
" hnode_%s_osc2 = hnode_%s_osc1;\n", nm, nm);
294 (void) fprintf(
STDOUT,
" hnode_%s_osc1 = hnode_%s_osc0;\n", nm, nm);
295 (void) fprintf(
STDOUT,
" hnode_%s_osc0 = (hnode_%s_fctr * hnode_%s_osc1) - hnode_%s_osc2;\n", nm, nm, nm, nm);
296 flag = sscanf(v2,
"%lf", &dtemp1);
298 (void) fprintf(
STDOUT,
" %s = ((R_TYPE) hnode_%s_osc1) * %s;\n", v0, nm, v2);
300 (void) fprintf(
STDOUT,
" %s = (R_TYPE) hnode_%s_osc1;\n", v0, nm );
302 flag = sscanf(v1,
"%lf", &dtemp1);
304 (void) fprintf(
STDOUT,
" %s += %s;\n", v0, v1);
311 char *s = (
char*) NULL;
321 char sgn[2] = {
'\0'};
335 flag1 = sscanf(v3,
"%lf", &dtemp1);
336 (void) strcpy(v7, v3);
339 (void) strcat(v3,
"L");
342 flag1 = sscanf(v4,
"%lf", &dtemp1);
345 (void) strcat(v4,
"L");
348 (void) strcpy(v5,
"sinl");
349 (void) strcpy(v6,
"sine");
352 (void) strcpy(v5,
"cosl");
353 (void) strcpy(v6,
"cosine");
356 (void) fprintf(
STDOUT,
" if ( 0.0 > %s ) {\n", v3);
357 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (%s)\\n\");\n", v6);
359 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
Node_List[out].mline[0]);
364 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
368 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n value of control frequency <%s> cannot be negative\\n\");\n", v7);
369 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
370 (void) fprintf(
STDOUT,
" }\n");
371 (void) fprintf(
STDOUT,
" if ( !inode_%s_first ) {\n", nm);
372 (void) fprintf(
STDOUT,
" if ( hnode_%s_freq != (H_PREC) %s ) {\n", nm, v3);
373 (void) fprintf(
STDOUT,
" hnode_%s_phase += _2PI_ * (hnode_%s_freq - ((H_PREC) %s)) * napa_abs_time;\n", nm, nm, v3);
374 (void) fprintf(
STDOUT,
" hnode_%s_phase -= _2PI_ * floorl(hnode_%s_phase / _2PI_);\n", nm, nm );
375 (void) fprintf(
STDOUT,
" hnode_%s_freq = (H_PREC) %s;\n", nm, v3);
376 (void) fprintf(
STDOUT,
" }\n");
377 (void) fprintf(
STDOUT,
" } else {\n");
378 (void) fprintf(
STDOUT,
" inode_%s_first = false;\n", nm);
379 (void) fprintf(
STDOUT,
" hnode_%s_freq = (H_PREC) %s;\n", nm, v3);
380 (void) fprintf(
STDOUT,
" }\n");
382 (void) fprintf(
STDOUT,
" %s = ", v0);
383 flag2 = sscanf(v1,
"%lf", &dtemp1);
385 (void) fprintf(
STDOUT,
"%s + ", v1);
387 flag2 = sscanf(v2,
"%lf", &dtemp1);
388 if ((1 != flag2) ||
ISNOTEQUAL(1.0, dtemp1)) {
389 (void) fprintf(
STDOUT,
"(%s) * ", v2);
392 (void) fprintf(
STDOUT,
"((R_TYPE) %s((_2PI_ * hnode_%s_freq * napa_abs_time) + hnode_%s_phase", v5, nm, nm);
394 flag2 = sscanf(v3,
"%lf", &dtemp1);
396 (void) fprintf(
STDOUT,
"((R_TYPE) %s(%.21LfL * napa_abs_time", v5,
_2PI_ * (
long double) dtemp1);
398 (void) fprintf(
STDOUT,
"((R_TYPE) %s(_2PI_ * ((H_PREC) %s) * napa_abs_time", v5, v3);
401 flag2 = sscanf(v4,
"%lf", &dtemp1);
403 (void) fprintf(
STDOUT,
" + ((H_PREC) (%s))", v4);
405 (void) fprintf(
STDOUT,
"));\n");
411 char *s = (
char*) NULL;
418 char sgn[2] = {
'\0'};
432 flag = sscanf(v4,
"%lf", &dtemp1);
433 if ((1 == flag) &&
ISSMALL(dtemp1)) {
434 (void) fprintf(
STDOUT,
" %s = %s * TIME;\n", v0, v3);
436 (void) fprintf(
STDOUT,
" %s = %s * (TIME + (%s));\n", v0, v3, v4);
438 (void) fprintf(
STDOUT,
" %s = %s - floor(%s);\n", v0, v0, v0);
441 (void) fprintf(
STDOUT,
" if ( 0.50 > %s ) {\n", v0);
444 (void) fprintf(
STDOUT,
" if ( %s < %s ) {\n", v0, v5);
446 flag = sscanf(v1,
"%lf", &dtemp1);
447 if ((1 == flag) &&
ISSMALL(dtemp1)) {
448 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v2);
449 (void) fprintf(
STDOUT,
" } else {\n");
450 (void) fprintf(
STDOUT,
" %s = - (%s);\n", v0, v2);
452 (void) fprintf(
STDOUT,
" %s = %s + (%s);\n", v0, v1, v2);
453 (void) fprintf(
STDOUT,
" } else {\n");
454 (void) fprintf(
STDOUT,
" %s = %s - (%s);\n", v0, v1, v2);
456 (void) fprintf(
STDOUT,
" }\n");
462 char *s = (
char*) NULL;
469 char sgn[2] = {
'\0'};
470 double dtemp1, dtemp2;
485 (void) strcpy(v5,
"0.5");
488 flag1 = sscanf(v4,
"%lf", &dtemp1);
489 if ((1 == flag1) &&
ISSMALL(dtemp1)) {
490 (void) fprintf(
STDOUT,
" %s = %s * TIME;\n", v0, v3);
492 (void) fprintf(
STDOUT,
" %s = %s * (TIME + (%s));\n", v0, v3, v4);
494 (void) fprintf(
STDOUT,
" %s = %s - floor(%s);\n", v0, v0, v0);
495 flag1 = sscanf(v5,
"%lf", &dtemp1);
497 (void) fprintf(
STDOUT,
" if ( (%s * 0.5) > %s ) {\n", v5, v0);
498 (void) fprintf(
STDOUT,
" %s = (2.0 / %s) * %s;\n", v0, v5, v0);
499 (void) fprintf(
STDOUT,
" } else if ( (1.0 - (0.5 * %s)) > %s ) {\n", v5, v0);
500 (void) fprintf(
STDOUT,
" %s = (1.0 - (2.0 * %s)) / (1.0 - %s);\n", v0, v0, v5);
501 (void) fprintf(
STDOUT,
" } else {\n");
502 (void) fprintf(
STDOUT,
" %s = (2.0 / %s) * (%s - 1.0);\n", v0, v5, v0);
503 (void) fprintf(
STDOUT,
" }\n");
505 (void) fprintf(
STDOUT,
" %s = %.15e * (0.5 - %s);\n", v0, 2.0 / (1.0 - dtemp1), v0);
506 }
else if (
ISEQUAL(1.0, dtemp1)) {
507 (void) fprintf(
STDOUT,
" if ( %.15e > %s ) {\n", dtemp1 * 0.5, v0);
508 (void) fprintf(
STDOUT,
" %s = %.15e * %s;\n", v0, 2.0 / dtemp1, v0);
509 (void) fprintf(
STDOUT,
" } else {\n");
510 (void) fprintf(
STDOUT,
" %s = %.15e * (%s - 1.0);\n", v0, 2.0 / dtemp1, v0);
511 (void) fprintf(
STDOUT,
" }\n");
513 (void) fprintf(
STDOUT,
" if ( %.15e > %s ) {\n", dtemp1 * 0.5, v0);
514 (void) fprintf(
STDOUT,
" %s = %.15e * %s;\n", v0, 2.0 / dtemp1, v0);
515 (void) fprintf(
STDOUT,
" } else if ( %.15e > %s ) {\n", 1.0 - (dtemp1 * 0.5), v0);
516 (void) fprintf(
STDOUT,
" %s = %.15e * (0.5 - %s);\n", v0, 2.0 / (1.0 - dtemp1), v0);
517 (void) fprintf(
STDOUT,
" } else {\n");
518 (void) fprintf(
STDOUT,
" %s = %.15e * (%s - 1.0);\n", v0, 2.0 / dtemp1, v0);
519 (void) fprintf(
STDOUT,
" }\n");
521 flag1 = sscanf(v1,
"%lf", &dtemp1);
522 flag2 = sscanf(v2,
"%lf", &dtemp2);
523 if ((1 == flag1) && (1 == flag2) &&
ISSMALL(dtemp1) &&
ISEQUAL(dtemp2, 1.0)) {
527 (void) fprintf(
STDOUT,
" %s = ", v0);
529 (void) fprintf(
STDOUT,
"%s + (", v1);
531 if ((1 != flag2) ||
ISNOTEQUAL(1.0, dtemp2)) {
532 (void) fprintf(
STDOUT,
"%s * ", v2);
534 (void) fprintf(
STDOUT,
"%s", v0);
536 (void) fprintf(
STDOUT,
");\n");
538 (void) fprintf(
STDOUT,
";\n" );
546 char *s = (
char*) NULL;
552 char sgn[2] = {
'\0'};
563 (void) fprintf(
STDOUT,
" %s = (%s > TIME)", v0, v3);
567 (void) fprintf(
STDOUT,
" %s = (%s > TIME) || (%s < TIME)", v0, v3, v4);
569 (void) fprintf(
STDOUT,
" ? %s : %s;\n", v1, v2);
575 char *s = (
char*) NULL;
579 char sgn[2] = {
'\0'};
587 (void) fprintf(
STDOUT,
" %s = (%s >> %s) & 1LL;\n", v0, v2, v1);
593 char *s = (
char*) NULL;
597 char sgn[2] = {
'\0'};
607 flag = sscanf(v1,
"%lf", &dtemp1);
608 if ((1 == flag) &&
ISSMALL(dtemp1)) {
609 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v2);
611 (void) fprintf(
STDOUT,
" %s = (%s) + (%s);\n", v0, v1, v2);
618 char *s = (
char*) NULL;
622 char sgn[2] = {
'\0'};
634 flag = sscanf(v1,
"%lli", &lltemp1);
635 if ((1 == flag) && (0LL == lltemp1)) {
636 (void) fprintf(
STDOUT,
" %s = 0LL;\n", v0);
639 if ((1 == flag) && (1LL == lltemp1)) {
640 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v2);
643 if ((1 == flag) && (-1LL == lltemp1)) {
644 (void) fprintf(
STDOUT,
" %s = -%s;\n", v0, v2);
647 if ((1 == flag) && (2LL == lltemp1)) {
648 (void) fprintf(
STDOUT,
" %s = %s + %s;\n", v0, v2, v2);
652 flag = sscanf(v1,
"%lf", &dtemp2);
653 if ((1 == flag) &&
ISSMALL(dtemp2)) {
654 (void) fprintf(
STDOUT,
" %s = 0.0;\n", v0);
657 if ((1 == flag) && (
ISEQUAL(1.0, dtemp2))) {
658 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v2);
661 if ((1 == flag) && (
ISEQUAL(-1.0, dtemp2))) {
662 (void) fprintf(
STDOUT,
" %s = -%s;\n", v0, v2);
665 if ((1 == flag) && (
ISEQUAL(2.0, dtemp2))) {
666 (void) fprintf(
STDOUT,
" %s = %s + %s;\n", v0, v2, v2);
670 (void) fprintf(
STDOUT,
" %s = %s * %s;\n", v0, v1, v2);
677 char *s = (
char*) NULL;
681 char sgn[2] = {
'\0'};
694 (void) fprintf(
STDERR,
" the node <%s> is far too complex to model accurately the under/overflow\n",
Node_List[out].name1);
695 (void) fprintf(
STDERR,
" behavior of an actual realization, we suggest to use a lower level model\n\n");
704 flag = sscanf(v1,
"%lli", &lltemp1);
705 if ((1 == flag) && (0LL == lltemp1)) {
707 (void) fprintf(
STDOUT,
" %s = 0LL;\n", v0);
711 if ((1 == flag) && (1LL == lltemp1)) {
713 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v2);
715 (void) fprintf(
STDOUT,
" %s += %s;\n", v0, v2);
720 flag = sscanf(v1,
"%lf", &dtemp2);
721 if ((1 == flag) &&
ISSMALL(dtemp2)) {
723 (void) fprintf(
STDOUT,
" %s = 0.0;\n", v0);
727 if ((1 == flag) && (
ISEQUAL(1.0, dtemp2))) {
729 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v2);
731 (void) fprintf(
STDOUT,
" %s += %s;\n", v0, v2);
735 if ((1 == flag) && (
ISEQUAL(-1.0, dtemp2))) {
737 (void) fprintf(
STDOUT,
" %s = -%s;\n", v0, v2);
739 (void) fprintf(
STDOUT,
" %s -= %s;\n", v0, v2);
745 (void) fprintf(
STDOUT,
" %s = (%s) * (%s);\n", v0, v1, v2);
747 (void) fprintf(
STDOUT,
" %s += (%s) * (%s);\n", v0, v1, v2);
755 char *s = (
char*) NULL;
759 char sgn[2] = {
'\0'};
771 (void) fprintf(
STDOUT,
" if ( 0LL != %s ) {\n", v1);
774 (void) fprintf(
STDOUT,
" if ( 0LL == %s ) {\n", v1);
776 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v2);
777 (void) fprintf(
STDOUT,
" }\n");
778 if ((w1 == w2) && (0 != strcmp(sgn,
"-"))) {
786 char *s = (
char*) NULL;
791 char sgn[2] = {
'\0'};
801 (void) fprintf(
STDOUT,
" if ( %s > %s ) {\n", v3, v2);
802 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v2);
803 (void) fprintf(
STDOUT,
" } else if ( %s < %s ) {\n", v3, v1);
804 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v1);
805 (void) fprintf(
STDOUT,
" } else {\n");
806 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v3);
807 (void) fprintf(
STDOUT,
" }\n");
813 char *s = (
char*) NULL;
814 char *nm = (
char*) NULL;
818 char sgn[2] = {
'\0'};
819 double dtemp1, dtemp2;
823 (void) strcpy(v1, nm);
829 (void) fprintf(
STDOUT,
" inode_%s_ok = -inode_%s_ok;\n", nm, nm);
830 (void) fprintf(
STDOUT,
" if ( 0LL < inode_%s_ok ) {\n", nm);
831 (void) fprintf(
STDOUT,
" %s = ", v1);
832 flag = sscanf(v2,
"%lf", &dtemp1);
834 (void) fprintf(
STDOUT,
"%s + ", v2);
836 (void) fprintf(
STDOUT,
"dnode_%s_g1", nm);
837 flag = sscanf(v3,
"%lf", &dtemp2);
839 (void) fprintf(
STDOUT,
" * %s", v3);
841 (void) fprintf(
STDOUT,
";\n");
842 (void) fprintf(
STDOUT,
" } else {\n");
843 (void) fprintf(
STDOUT,
" do {\n");
844 (void) fprintf(
STDOUT,
" dnode_%s_g1 = (2.22044604925031332e-16*((R_TYPE) (napa_rand()>>10))) - 1.0;\n", nm);
845 (void) fprintf(
STDOUT,
" dnode_%s_g2 = (2.22044604925031332e-16*((R_TYPE) (napa_rand()>>10))) - 1.0;\n", nm);
846 (void) fprintf(
STDOUT,
" dnode_%s_rd = SQR(dnode_%s_g1) + SQR(dnode_%s_g2);\n", nm, nm, nm);
847 (void) fprintf(
STDOUT,
" } while ( (1.0 < dnode_%s_rd) || (0.0 >= dnode_%s_rd) );\n", nm, nm);
848 (void) fprintf(
STDOUT,
" dnode_%s_f = sqrt((-FSL * log(dnode_%s_rd)) / dnode_%s_rd);\n", nm, nm, nm);
849 (void) fprintf(
STDOUT,
" dnode_%s_g1 *= dnode_%s_f;\n", nm, nm);
850 (void) fprintf(
STDOUT,
" dnode_%s_g2 *= dnode_%s_f;\n", nm, nm);
851 (void) fprintf(
STDOUT,
" %s = ", v1);
852 flag = sscanf(v2,
"%lf", &dtemp1);
854 (void) fprintf(
STDOUT,
"%s + ", v2);
856 (void) fprintf(
STDOUT,
"dnode_%s_g2", nm);
857 flag = sscanf(v3,
"%lf", &dtemp2);
859 (void) fprintf(
STDOUT,
" * %s", v3);
861 (void) fprintf(
STDOUT,
";\n");
862 (void) fprintf(
STDOUT,
" }\n");
868 char *s = (
char*) NULL;
873 char sgn[2] = {
'\0'};
882 right = (0 != strcmp(sgn,
"-")) ?
true :
false;
885 (void) strcpy(v3, v2);
896 if (1 != sscanf(v1,
"%li", &sh)) {
898 (void) fprintf(
STDERR,
" the shift value is not a well-formed positive C long integer <%s>\n", v1);
903 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v3);
907 (void) fprintf(
STDOUT,
" %s = ((%s & %ldLL) << %ld) | ((%s >> %ld) & %ldLL);\n",
908 v0, v3, (1L << sh) - 1L, (labs(w1)-sh), v3, sh, (1L << (labs(w1)-sh)) - 1L);
910 (void) fprintf(
STDOUT,
" %s = ((%s & %ldLL) << %ld) | ((%s >> %ld) & %ldLL);\n",
911 v0, v3, (1L << (labs(w1)-sh)) - 1L, sh, v3, (labs(w1)-sh), (1L << sh) - 1L);
913 if (((0L > w1) && (0L < w2)) || ((0L < w1) && (0L > w2))
914 || ((0L > w1) && (w1 > w2)) || ((0L < w1) && (w1 < w2))) {
916 ltemp1 = (1L << (w1-1L));
917 ltemp2 = ((2*ltemp1) - 1L);
918 (void) fprintf(
STDOUT,
" %s = (%s & ( %ldLL))\n", v0, v0, ltemp1);
919 (void) fprintf(
STDOUT,
" %*s ? (%s | (-%ldLL))\n", (
int) strlen(v0),
" ", v0, ltemp1);
920 (void) fprintf(
STDOUT,
" %*s : (%s & ( %ldLL));\n", (
int) strlen(v0),
" ", v0, ltemp2);
921 }
else if (0L > w1) {
922 ltemp1 = (1L << -w1) - 1L;
923 (void) fprintf(
STDOUT,
" %s &= %ldLL;\n", v0, ltemp1);
928 (void) fprintf(
STDOUT,
" %s_s = labs(%s) %% %ldLL;\n", v0, v1, labs(w1));
929 (void) fprintf(
STDOUT,
" if ( 0L == %s_s ) {\n", v0);
930 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v3);
931 (void) fprintf(
STDOUT,
" } else {\n");
933 (void) fprintf(
STDOUT,
" if ( 0 < %s ) {\n", v1);
935 (void) fprintf(
STDOUT,
" if ( 0 > %s ) {\n", v1);
937 (void) fprintf(
STDOUT,
" %s = ((%s & ((1LL << %s_s)-1LL)) << (%ld-%s_s))\n", v0, v3, v0, labs(w1), v0);
938 (void) fprintf(
STDOUT,
" %*s | ((%s >> %s_s) & ((1LL << (%ld-%s_s))-1LL));\n", (
int) strlen(v0),
" ", v3, v0, labs(w1), v0);
939 (void) fprintf(
STDOUT,
" } else {\n");
940 (void) fprintf(
STDOUT,
" %s = ((%s & ((1LL << (%ld-%s_s))-1LL)) << %s_s)\n", v0, v3, labs(w1), v0, v0);
941 (void) fprintf(
STDOUT,
" %*s | ((%s >> (%ld-%s_s)) & ((1LL << %s_s)-1LL));\n", (
int) strlen(v0),
" ", v3, labs(w1), v0, v0);
942 (void) fprintf(
STDOUT,
" }\n");
943 if (((0L > w1) && (0L < w2)) || ((0L < w1) && (0L > w2))|| ((0L > w1) && (w1 > w2)) || ((0L < w1) && (w1 < w2))) {
946 ltemp1 = (1L << (w1-1L));
947 ltemp2 = ((2*ltemp1) - 1L);
948 (void) fprintf(
STDOUT,
" %s = (%s & ( %ldLL))\n", v0, v0, ltemp1);
949 (void) fprintf(
STDOUT,
" %*s ? (%s | (-%ldLL))\n", (
int) strlen(v0),
" ", v0, ltemp1);
950 (void) fprintf(
STDOUT,
" %*s : (%s & ( %ldLL));\n", (
int) strlen(v0),
" ", v0, ltemp2);
951 }
else if (0L > w1) {
952 ltemp1 = (1L << -w1) - 1L;
953 (void) fprintf(
STDOUT,
" %s &= %ldLL;\n", v0, ltemp1);
957 (void) fprintf(
STDOUT,
" }\n");
964 char *s = (
char*) NULL;
969 char sgn[2] = {
'\0'};
978 (void) strcpy(v3, v2);
985 if (1 != sscanf(v1,
"%li", &sh)) {
987 (void) fprintf(
STDERR,
" the shift value is not a well-formed positive C long integer <%s>\n", v1);
990 if ((0L > sh) || (sh >= labs(w1))) {
992 (void) fprintf(
STDERR,
" shift value <%ld> is outside the allowed range [0..%ld]\n", sh, labs(w1)-1L);
994 (void) fprintf(
STDERR,
" determined by the width <%ld> of input node <%s>\n", labs(w1), v2);
999 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v3);
1004 (void) fprintf(
STDOUT,
" %s = %s << %ld;\n", v0, v3, sh);
1007 (void) fprintf(
STDOUT,
" %s = %s >> %ld;\n", v0, v3, sh);
1015 (void) fprintf(
STDOUT,
" %s = %s << %s;\n", v0, v3, v1);
1018 (void) fprintf(
STDOUT,
" %s = %s >> %s;\n", v0, v3, v1);
1029 char *s = (
char*) NULL;
1030 char *nm = (
char*) NULL;
1035 char sgn[2] = {
'\0'};
1041 (void) strcpy(v0, nm);
1046 (void) strcpy(v3, v2);
1053 if (1 != sscanf(v1,
"%li", &sh)) {;
1055 (void) fprintf(
STDERR,
" the shift value is not a well-formed positive C long integer <%s>\n", v1);
1058 if ((0L > sh) || (sh >= labs(w1))) {
1060 (void) fprintf(
STDERR,
" shift value <%ld> is outside the allowed range [0..%ld]\n", sh, labs(w1)-1L);
1062 (void) fprintf(
STDERR,
" determined by the width <%ld> of input node <%s>\n", labs(w1), v2);
1067 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v3);
1070 dtemp2 = (double) (1L << sh);
1071 (void) fprintf(
STDOUT,
" %s = (0LL > %s)\n", v0, v3);
1072 (void) fprintf(
STDOUT,
" %*s ? (I_TYPE) ((((R_TYPE) %s)/%.1f) - 0.5)\n", (
int) strlen(v0),
" ", v3, dtemp2);
1073 (void) fprintf(
STDOUT,
" %*s : (I_TYPE) ((((R_TYPE) %s)/%.1f) + 0.5);\n", (
int) strlen(v0),
" ", v3, dtemp2);
1075 (void) fprintf(
STDOUT,
" dnode_%s_s = ((R_TYPE) %s) / ((R_TYPE) (1LL << %s));\n", nm, v3, v1);
1076 (void) fprintf(
STDOUT,
" %s = (0LL > %s)\n", v0, v3);
1077 (void) fprintf(
STDOUT,
" %*s ? (I_TYPE) (dnode_%s_s - 0.5)\n", (
int) strlen(v0),
" ", nm);
1078 (void) fprintf(
STDOUT,
" %*s : (I_TYPE) (dnode_%s_s + 0.5);\n", (
int) strlen(v0),
" ", nm);
1085 char *s = (
char*) NULL;
1086 char *nm = (
char*) NULL;
1091 char sgn[2] = {
'\0'};
1097 (void) strcpy(v0, nm);
1102 (void) strcpy(v3, v2);
1109 if (1 != sscanf(v1,
"%li", &sh)) {
1111 (void) fprintf(
STDERR,
" the shift value is not a well-formed positive C long integer <%s>\n", v1);
1114 if ((0L > sh) || (sh >= labs(w1))) {
1116 (void) fprintf(
STDERR,
" shift value <%ld> is outside the allowed range [0..%ld]\n", sh, labs(w1)-1L);
1118 (void) fprintf(
STDERR,
" determined by the width <%ld> of input node <%s>\n", labs(w1), v2);
1123 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v3);
1126 dtemp2 = (double) (1L << sh);
1127 (void) fprintf(
STDOUT,
" if ( 0LL > %s ) {\n", v3);
1128 (void) fprintf(
STDOUT,
" dnode_%s_d = -((R_TYPE) %s) / %.1f;\n", nm, v3, dtemp2);
1129 (void) fprintf(
STDOUT,
" %s_l = (I_TYPE) dnode_%s_d;\n", v0, nm);
1130 (void) fprintf(
STDOUT,
" dnode_%s_r = dnode_%s_d - ((R_TYPE) %s_l);\n", nm, nm, v0);
1131 (void) fprintf(
STDOUT,
" if ( ISEVEN(%s_l) && (0.5 == dnode_%s_r) ) {\n", v0, nm);
1132 (void) fprintf(
STDOUT,
" %s = -%s_l;\n", v0, v0);
1133 (void) fprintf(
STDOUT,
" } else {\n");
1134 (void) fprintf(
STDOUT,
" %s = -(I_TYPE) (dnode_%s_d + 0.5);\n", v0, nm);
1135 (void) fprintf(
STDOUT,
" }\n");
1136 (void) fprintf(
STDOUT,
" } else {\n");
1137 (void) fprintf(
STDOUT,
" dnode_%s_d = ((R_TYPE) %s) / %.1f;\n", nm, v3, dtemp2);
1138 (void) fprintf(
STDOUT,
" %s_l = (I_TYPE) dnode_%s_d;\n", v0, nm);
1139 (void) fprintf(
STDOUT,
" dnode_%s_r = dnode_%s_d - ((R_TYPE) %s_l);\n", nm, nm, v0);
1140 (void) fprintf(
STDOUT,
" if ( ISEVEN(%s_l) && (0.5 == dnode_%s_r) ) {\n", v0, nm);
1141 (void) fprintf(
STDOUT,
" %s = %s_l;\n", v0, v0);
1142 (void) fprintf(
STDOUT,
" } else {\n");
1143 (void) fprintf(
STDOUT,
" %s = (I_TYPE) (dnode_%s_d + 0.5);\n", v0, nm);
1144 (void) fprintf(
STDOUT,
" }\n");
1145 (void) fprintf(
STDOUT,
" }\n");
1147 (void) fprintf(
STDOUT,
" if ( 0LL <= %s ) {\n", v3);
1148 (void) fprintf(
STDOUT,
" dnode_%s_d = (R_TYPE) %s / ((R_TYPE) (1LL << %s));\n", nm, v3, v1);
1149 (void) fprintf(
STDOUT,
" %s_l = (I_TYPE) dnode_%s_d;\n", v0, nm);
1150 (void) fprintf(
STDOUT,
" dnode_%s_r = dnode_%s_d - ((R_TYPE) %s_l);\n", nm, nm, v0);
1151 (void) fprintf(
STDOUT,
" if ( ISEVEN(%s_l) && (0.5 == dnode_%s_r) ) {\n", v0, nm);
1152 (void) fprintf(
STDOUT,
" %s = %s_l;\n", v0, v0);
1153 (void) fprintf(
STDOUT,
" } else {\n");
1154 (void) fprintf(
STDOUT,
" %s = (I_TYPE) (dnode_%s_d + 0.5);\n", v0, nm);
1155 (void) fprintf(
STDOUT,
" }\n");
1156 (void) fprintf(
STDOUT,
" } else {\n");
1157 (void) fprintf(
STDOUT,
" dnode_%s_d = -((R_TYPE) %s) / ((R_TYPE) (1LL << %s));\n", nm, v3, v1);
1158 (void) fprintf(
STDOUT,
" %s_l = (I_TYPE) dnode_%s_d;\n", v0, nm);
1159 (void) fprintf(
STDOUT,
" dnode_%s_r = dnode_%s_d - ((R_TYPE) %s_l);\n", nm, nm, v0);
1160 (void) fprintf(
STDOUT,
" if ( ISEVEN(%s_l) && (0.5 == dnode_%s_r) ) {\n", v0, nm);
1161 (void) fprintf(
STDOUT,
" %s = -%s_l;\n", v0, v0);
1162 (void) fprintf(
STDOUT,
" } else {\n");
1163 (void) fprintf(
STDOUT,
" %s = -(I_TYPE) (dnode_%s_d + 0.5);\n", v0, nm);
1164 (void) fprintf(
STDOUT,
" }\n");
1165 (void) fprintf(
STDOUT,
" }\n");
1174 char *s = (
char*) NULL;
1175 char *nm = (
char*) NULL;
1179 char sgn[2] = {
'\0'};
1184 (void) strcpy(v0, nm);
1186 flag = sscanf(v2,
"%li", &itemp);
1187 if ((1 == flag) && (1L == itemp)) {
1188 (void) fprintf(
STDOUT,
" if ( %ldL <= pnode_%s_ptr1 ) {\n",
Node_List[out].ID2, nm);
1189 (void) fprintf(
STDOUT,
" pnode_%s_ptr1 = pnode_%s_ini;\n", nm, nm);
1190 (void) fprintf(
STDOUT,
" }\n");
1191 (void) fprintf(
STDOUT,
" %s = %s_clock[pnode_%s_ptr1];\n", v0, v0, nm);
1192 (void) fprintf(
STDOUT,
" pnode_%s_ptr1++;\n", nm);
1194 (void) fprintf(
STDOUT,
" pnode_%s_ptr2++;\n", nm);
1195 (void) fprintf(
STDOUT,
" if ( pnode_%s_width <= pnode_%s_ptr2 ) {\n", nm, nm);
1196 (void) fprintf(
STDOUT,
" pnode_%s_ptr1++;\n", nm);
1197 (void) fprintf(
STDOUT,
" pnode_%s_ptr2 = 0L;\n", nm);
1198 (void) fprintf(
STDOUT,
" }\n");
1199 (void) fprintf(
STDOUT,
" if ( %ldL <= pnode_%s_ptr1 ) {\n",
Node_List[out].ID2, nm);
1200 (void) fprintf(
STDOUT,
" pnode_%s_ptr1 = pnode_%s_ini;\n", nm, nm);
1201 (void) fprintf(
STDOUT,
" }\n");
1202 (void) fprintf(
STDOUT,
" %s = %s_clock[pnode_%s_ptr1];\n", v0, v0, nm);
1209 char *s = (
char*) NULL;
1212 char sgn[2] = {
'\0'};
1214 (void) strcpy(v0,
Node_List[out].name1);
1218 (void) fprintf(
STDOUT,
" %s = (I_TYPE) !(%s);\n", v0, v1);
1224 char *s = (
char*) NULL;
1227 char sgn[2] = {
'\0'};
1229 (void) strcpy(v0,
Node_List[out].name1);
1233 (void) fprintf(
STDOUT,
" %s = (I_TYPE) (0LL != %s);\n", v0, v1);
1239 char *s = (
char*) NULL;
1242 char sgn[2] = {
'\0'};
1244 (void) strcpy(v0,
Node_List[out].name1);
1248 (void) fprintf(
STDOUT,
" %s = (I_TYPE) !(%s);\n", v0, v0);
1251 (void) fprintf(
STDOUT,
" if ( 0LL != %s ) {\n", v1);
1252 (void) fprintf(
STDOUT,
" %s = (I_TYPE) !(%s);\n", v0, v0);
1253 (void) fprintf(
STDOUT,
" }\n");
1260 char *s = (
char*) NULL;
1263 char sgn[2] = {
'\0'};
1265 (void) strcpy(v0,
Node_List[out].name1);
1269 (void) fprintf(
STDOUT,
" %s = ~(%s);\n", v0, v1);
1275 char *s = (
char*) NULL;
1280 char sgn[2] = {
'\0'};
1283 unsigned long long msk;
1285 (void) strcpy(v0,
Node_List[out].name1);
1288 if (1 != sscanf(v1,
"0x%llx", &msk)) {;
1290 (void) fprintf(
STDERR,
" mask <%s> is not a valid hexadecimal constant\n", v1);
1294 (void) strcpy(v3, v2);
1302 if (0L != ((msk >> i) & 1L)) {
1303 if (i >= labs(w1)) {
1305 (void) fprintf(
STDERR,
" mask <%s> selects a bit row [0..%ld] outside the allowed range\n", v1, labs(w1)-1L);
1306 (void) fprintf(
STDERR,
" determined by the width <%ld> of input node <%s>\n", labs(w1), v2);
1311 (void) fprintf(
STDOUT,
" %s = (%s & 1LL);\n", v0, v3);
1313 (void) fprintf(
STDOUT,
" %s = ((%s >> %2ld) & 1LL);\n", v0, v3, i);
1316 (void) fprintf(
STDOUT,
" %s += ((%s >> %2ld) & 1LL) * %ld;\n", v0, v3, i, (1L << j));
1322 (void) fprintf(
STDOUT,
" %s = 0LL;\n", v0);
1331 char *s = (
char*) NULL;
1334 char sgn[2] = {
'\0'};
1336 (void) strcpy(v0,
Node_List[out].name1);
1340 (void) fprintf(
STDOUT,
" %s = CLIP(%s, 0.0, 1.0);\n", v0, v1);
1348 char *s = (
char*) NULL;
1351 char sgn[2] = {
'\0'};
1353 (void) strcpy(v0,
Node_List[out].name1);
1357 (void) fprintf(
STDOUT,
" %s = CLIP(1.0 - %s, 0.0, 1.0);\n", v0, v1);
1363 char *s = (
char*) NULL;
1364 char *t = (
char*) NULL;
1375 (void) strcpy(v0,
Node_List[out].name1);
1379 (void) strcpy(v6, v2);
1381 (void) strcpy(v3, s);
1382 (void) fprintf(
STDOUT,
" switch (%s) {\n", v2);
1388 (void) fprintf(
STDOUT,
" %s =", v0);
1392 (void) fprintf(
STDOUT,
";\n");
1397 flag = sscanf(t,
"%li", &m);
1398 if ((1 != flag) || (0L > m)) {
1400 (void) fprintf(
STDERR,
" illegal symbol inside template <%s> of opcode %ld of alu <%s>\n",
1402 (void) fprintf(
STDOUT,
";\n");
1406 for (j = 0L; j < m; j++) {
1410 (void) fprintf(
STDERR,
" mismatch between templates and arguments for opcode %ld of alu <%s>\n",
1412 (void) fprintf(
STDOUT,
";\n");
1418 (void) strcpy(v5, v4);
1420 (void) fprintf(
STDOUT,
" %s", v5);
1423 (void) fprintf(
STDOUT,
" break;\n");
1426 (void) fprintf(
STDOUT,
" default:\n");
1427 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (alu)\\n\");\n");
1429 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
Node_List[out].mline[0]);
1434 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
1438 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n unexpected value <%%lld> for opcode <%s>\\n\", %s);\n", v6, v2);
1439 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
1440 (void) fprintf(
STDOUT,
" }\n");
1446 char *s = (
char*) NULL;
1455 (void) strcpy(v0,
Node_List[out].name1);
1457 (void) fprintf(
STDOUT,
" %s =", v0);
1458 (void) strcpy(v2,
"");
1465 (void) fprintf(
STDOUT,
";\n");
1466 if (((
char*) NULL) != strstr(
Node_List[out].option,
"geometric")) {
1467 (void) fprintf(
STDOUT,
" %s = ROOT(%s, %g.0);\n", v0, v0, (
double)(n-1L));
1468 }
else if (((
char*) NULL) != strstr(
Node_List[out].option,
"harmonic" )) {
1469 (void) fprintf(
STDOUT,
" %s = 1.0 / %s;\n", v0, v0);
1470 (void) fprintf(
STDOUT,
" %s *= %.15e;\n", v0, 1.0/((
double)(n-1L)));
1471 }
else if (((
char*) NULL) != strstr(
Node_List[out].option,
"rms" )) {
1472 (void) fprintf(
STDOUT,
" %s = sqrt(%s * %.15e);\n", v0, v0, 1.0/((
double)(n-1L)));
1474 (void) fprintf(
STDOUT,
" %s *= %.15e;\n", v0, 1.0/((
double)(n-1L)));
1479 (void) fprintf(
STDOUT,
";\n");
1483 (void) strcat(v2,
"(");
1484 if (0 == strcmp(tok,
"+")) {
1486 }
else if (0 == strcmp(tok,
"-")) {
1488 (void) strcat(v2,
"-");
1490 (void) strcpy(v1, tok);
1492 (void) strcpy(v3,
")");
1495 if (((
char*) NULL) != strstr(
Node_List[out].option,
"geometric")) {
1496 (void) strcpy(v2,
"* (");
1498 (void) strcpy(v2,
"+ (");
1500 if (0 == strcmp(tok,
"+")) {
1502 }
else if (0 == strcmp(tok,
"-")) {
1504 (void) strcat(v2,
"-");
1506 (void) strcpy(v1, tok);
1510 if (((
char*) NULL) != strstr(
Node_List[out].option,
"harmonic" )) {
1511 (void) fprintf(
STDOUT,
" %s1.0 / MAX(EPSILON, %s)%s", v2, v1, v3);
1512 }
else if (((
char*) NULL) != strstr(
Node_List[out].option,
"geometric")) {
1513 (void) fprintf(
STDOUT,
" %sMAX(0.0, %s)%s", v2, v1, v3);
1514 }
else if (((
char*) NULL) != strstr(
Node_List[out].option,
"rms" )) {
1515 (void) fprintf(
STDOUT,
" %s%s * %s%s", v2, v1, v1, v3);
1517 (void) fprintf(
STDOUT,
" %s%s%s", v2, v1, v3);
1525 (void) fprintf(
STDOUT,
";\n");
1526 if (((
char*) NULL) != strstr(
Node_List[out].option,
"geometric")) {
1527 (void) fprintf(
STDOUT,
" %s = ROOT(%s, %g.0);\n", v0, v0, (
double)(n-1L));
1528 }
else if (((
char*) NULL) != strstr(
Node_List[out].option,
"harmonic")) {
1529 (void) fprintf(
STDOUT,
" %s = 1.0 / %s;\n", v0, v0);
1530 (void) fprintf(
STDOUT,
" %s *= %.15e;\n", v0, 1.0/((
double)(n-1L)));
1531 }
else if (((
char*) NULL) != strstr(
Node_List[out].option,
"rms")) {
1532 (void) fprintf(
STDOUT,
" %s = sqrt(%s * %.15e);\n", v0, v0, 1.0/((
double)(n-1L)));
1534 (void) fprintf(
STDOUT,
" %s *= %.15e;\n", v0, 1.0/((
double)(n-1L)));
1540 (void) fprintf(
STDOUT,
" %s = (%s)", v0, v0);
1542 if (((
char*) NULL) != strstr(
Node_List[out].option,
"geometric")) {
1543 (void) strcpy(v2,
"* (");
1545 (void) strcpy(v2,
"+ (");
1547 if (0 == strcmp(tok,
"+")) {
1549 }
else if (0 == strcmp(tok,
"-")) {
1551 (void) strcat(v2,
"-");
1553 (void) strcpy(v1, tok);
1556 if (((
char*) NULL) != strstr(
Node_List[out].option,
"harmonic")) {
1557 (void) fprintf(
STDOUT,
" %s1.0 / MAX(%s, EPSILON)%s", v2, v1, v3);
1558 }
else if (((
char*) NULL) != strstr(
Node_List[out].option,
"geometric")) {
1559 (void) fprintf(
STDOUT,
" %sMAX(%s, 0.0)%s", v2, v1, v3);
1560 }
else if (((
char*) NULL) != strstr(
Node_List[out].option,
"rms")) {
1561 (void) fprintf(
STDOUT,
" %s%s * %s%s", v2, v1, v1, v3);
1563 (void) fprintf(
STDOUT,
" %s%s%s", v2, v1, v3);
1570 char *s = (
char*) NULL;
1577 (void) strcpy(v0,
Node_List[out].name1);
1579 (void) fprintf(
STDOUT,
" %s =", v0);
1581 (void) strcpy(v1,
"");
1585 (void) fprintf(
STDOUT,
";\n");
1589 if (0 == strcmp(tok,
"+")) {
1591 }
else if (0 == strcmp(tok,
"-")) {
1593 (void) strcat(v1,
"-");
1595 (void) strcpy(v2, tok);
1599 (void) strcpy(v2, tok);
1602 (void) fprintf(
STDOUT,
" %s%s", v1, v2);
1609 char *s = (
char*) NULL;
1618 (void) strcpy(v0,
Node_List[out].name1);
1620 (void) fprintf(
STDOUT,
" %s =", v0);
1621 (void) strcpy(v2,
"");
1628 (void) fprintf(
STDOUT,
";\n");
1632 (void) fprintf(
STDOUT,
";\n");
1636 (void) strcat(v2,
"(");
1637 if (0 == strcmp(tok,
"+")) {
1639 }
else if (0 == strcmp(tok,
"-")) {
1641 (void) strcat(v2,
"-");
1643 (void) strcpy(v1, tok);
1645 (void) strcpy(v3,
")");
1650 (void) strcpy(v2,
"+ (");
1653 (void) strcpy(v2,
"* (");
1658 if (0 == strcmp(tok,
"+")) {
1660 }
else if (0 == strcmp(tok,
"-")) {
1662 (void) strcat(v2,
"-");
1664 (void) strcpy(v1, tok);
1668 (void) fprintf(
STDOUT,
" %s%s%s", v2, v1, v3);
1677 (void) fprintf(
STDERR,
" the node <%s> is too complex to model accurately the under/overflow\n",
Node_List[out].name1);
1678 (void) fprintf(
STDERR,
" behavior of an actual realization, we suggest to limit these nodes to 2 inputs\n\n");
1684 (void) fprintf(
STDOUT,
" %s = (%s)", v0, v0);
1685 (void) strcpy(v2,
"");
1689 (void) strcpy(v2,
"+ (");
1692 (void) strcpy(v2,
"* (");
1697 if (0 == strcmp(tok,
"+")) {
1699 }
else if (0 == strcmp(tok,
"-")) {
1701 (void) strcat(v2,
"-");
1703 (void) strcpy(v1, tok);
1706 (void) fprintf(
STDOUT,
" %s%s%s;\n", v2, v1, v3);
1712 char *s = (
char*) NULL;
1720 (void) strcpy(v0,
Node_List[out].name1);
1722 (void) fprintf(
STDOUT,
" %s =", v0);
1723 (void) strcpy(v2,
"");
1728 (void) fprintf(
STDOUT,
";\n");
1732 (void) strcat(v2,
"(");
1733 if (0 == strcmp(tok,
"+")) {
1735 }
else if (0 == strcmp(tok,
"-")) {
1737 (void) strcat(v2,
"-");
1739 (void) strcpy(v1, tok);
1741 (void) strcpy(v3,
")");
1745 (void) strcpy(v2,
"- (");
1747 if (0 == strcmp(tok,
"+")) {
1749 }
else if (0 == strcmp(tok,
"-")) {
1751 (void) strcat(v2,
"-");
1753 (void) strcpy(v1, tok);
1757 (void) fprintf(
STDOUT,
" %s%s%s", v2, v1, v3);
1764 char *s = (
char*) NULL;
1770 (void) strcpy(v0,
Node_List[out].name1);
1772 (void) fprintf(
STDOUT,
" %s = (I_TYPE) ", v0);
1774 (void) fprintf(
STDOUT,
"!(");
1776 (void) fprintf(
STDOUT,
"(");
1782 (void) fprintf(
STDOUT,
");\n");
1786 (void) strcpy(v1,
"");
1790 (void) strcpy(v1,
" && ");
1793 (void) strcpy(v1,
" || ");
1797 (void) fprintf(
STDOUT,
"%s%s", v1, v2);
1804 char *s = (
char*) NULL;
1810 (void) strcpy(v0,
Node_List[out].name1);
1812 (void) fprintf(
STDOUT,
" %s = ", v0);
1814 (void) fprintf(
STDOUT,
"~(");
1821 (void) fprintf(
STDOUT,
")");
1823 (void) fprintf(
STDOUT,
";\n");
1827 (void) strcpy(v1,
"");
1831 (void) strcpy(v1,
" & ");
1834 (void) strcpy(v1,
" | ");
1837 (void) strcpy(v1,
" ^ ");
1841 (void) fprintf(
STDOUT,
"%s%s", v1, v2);
1848 char *s = (
char*) NULL;
1855 (void) strcpy(v0,
Node_List[out].name1);
1857 (void) fprintf(
STDOUT,
" %s = ", v0);
1862 (void) fprintf(
STDOUT,
";\n");
1866 (void) strcpy(v1,
"(I_TYPE) (");
1867 (void) strcpy(v2,
")");
1870 (void) strcpy(v1,
" + (I_TYPE) (");
1871 (void) strcpy(v2,
")");
1874 (void) fprintf(
STDOUT,
"%s%s != 0%s", v1, v3, v2);
1876 (void) fprintf(
STDOUT,
" %s = (I_TYPE) ((", v0);
1878 (void) fprintf(
STDOUT,
"%s %% 2LL) != 0LL);\n", v0);
1880 (void) fprintf(
STDOUT,
"%s %% 2LL) == 0LL);\n", v0);
1892 char *s = (
char*) NULL;
1897 (void) strcpy(v0,
Node_List[out].name1);
1906 (void) fprintf(
STDOUT,
" %s = ", v0);
1908 (void) fprintf(
STDOUT,
"MIN(%s, ", v1);
1911 (void) fprintf(
STDOUT,
"MAX(%s, ", v1);
1916 (void) fprintf(
STDOUT,
"%s);\n", v1);
1919 (void) fprintf(
STDOUT,
"%s);\n", v0);
1923 (void) fprintf(
STDOUT,
" %s = CLIP(1.0 - %s, 0.0, 1.0);\n", v0, v0);
1925 (void) fprintf(
STDOUT,
" %s = CLIP(%s, 0.0, 1.0);\n", v0, v0);
1935 char *s = (
char*) NULL;
1940 (void) strcpy(v0,
Node_List[out].name1);
1946 (void) fprintf(
STDOUT,
" %s = %s + %s - (2.0 * MIN(%s, %s));\n", v0, v1, v2, v1, v2);
1948 (void) fprintf(
STDOUT,
" %s = CLIP(1.0 - %s, 0.0, 1.0);\n", v0, v0);
1950 (void) fprintf(
STDOUT,
" %s = CLIP(%s, 0.0, 1.0);\n", v0, v0);
1957 char *s = (
char*) NULL;
1973 (void) strcpy(v0,
Node_List[out].name1);
1976 (void) strcpy(v2,
"fmod(");
1978 (void) strcpy(v2,
"");
1980 (void) strcat(v2,
"(");
1982 if (0 == strcmp(tok,
"+")) {
1984 }
else if (0 == strcmp(tok,
"-")) {
1986 (void) strcat(v2,
"-");
1988 (void) strcpy(v1, tok);
1990 (void) strcpy(v3,
")");
1994 (void) strcpy(v5,
" / (");
1998 (void) strcpy(v5,
" % (");
2000 (void) strcpy(v5,
", (" );
2007 if (0 == strcmp(tok,
"+")) {
2009 }
else if (0 == strcmp(tok,
"-")) {
2011 (void) strcat(v5,
"-");
2013 (void) strcpy(v4, tok);
2016 (void) strcat(v6,
"))");
2018 (void) strcat(v6,
")" );
2023 flag = sscanf(v4,
"%lli", &lltemp);
2025 (void) snprintf(v4, (
size_t) (
STRLENGTH-1L),
"%lldLL", lltemp);
2027 if (0LL == lltemp) {
2038 (void) fprintf(
STDERR,
" division by 0!\n");
2042 flag = sscanf(v4,
"%lf", &dtemp);
2056 (void) fprintf(
STDERR,
" division by 0.0!\n");
2060 if ((((
char*) NULL) == strstr(
Node_List[out].option,
"nocheck")) && (!constant)) {
2062 (void) fprintf(
STDOUT,
" if ( 0LL == %s ) {\n", v4);
2064 (void) fprintf(
STDOUT,
" if ( ISSMALL(%s) ) {\n", v4);
2068 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (div)\\n\");\n");
2071 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (mod)\\n\");\n");
2077 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
Node_List[out].mline[0]);
2082 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
2086 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n division by zero\\n\");\n");
2087 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
2088 (void) fprintf(
STDOUT,
" }\n");
2090 (void) fprintf(
STDOUT,
" %s = %s%s%s%s%s%s;\n", v0, v2, v1, v3, v5, v4, v6);
2093 (void) fprintf(
STDERR,
" the node <%s> is too complex to model accurately the under/overflow\n",
Node_List[out].name1);
2094 (void) fprintf(
STDERR,
" behavior of an actual realization, we suggest to use a lower level model\n\n");
2101 char *s = (
char*) NULL;
2104 char sgn[2] = {
'\0'};
2107 (void) strcpy(v0,
Node_List[out].name1);
2112 (void) fprintf(
STDOUT,
" %s = ", v0);
2114 (void) fprintf(
STDOUT,
"fabs(%s);\n", v1);
2116 (void) fprintf(
STDOUT,
"labs(%s);\n", v1);
2123 char *s = (
char*) NULL;
2127 char sgn[2] = {
'\0'};
2133 (void) strcpy(v0,
Node_List[out].name1);
2140 flag = sscanf(v1,
"%li", &itemp1);
2141 if ((1 == flag) && (itemp1 <= 0L)) {
2143 (void) fprintf(
STDERR,
" quantification level <%ld> must be strictly positive\n", itemp1);
2146 if ((1 == flag) && (1L == itemp1)) {
2147 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v2);
2150 if ((1 == flag) && (1L < itemp1)) {
2151 (void) fprintf(
STDOUT,
" if ( 0LL < %s ) {\n", v2);
2152 (void) fprintf(
STDOUT,
" %s = %ldLL * ( %s / %ldLL);\n", v0, itemp1, v2, itemp1);
2153 (void) fprintf(
STDOUT,
" } else {\n");
2154 (void) fprintf(
STDOUT,
" %s = -%ldLL * (-%s / %ldLL);\n", v0, itemp1, v2, itemp1);
2155 (void) fprintf(
STDOUT,
" }\n");
2158 (void) fprintf(
STDOUT,
" if ( 0LL < %s ) {\n", v1);
2159 (void) fprintf(
STDOUT,
" if ( 0LL < %s ) {\n", v2);
2160 (void) fprintf(
STDOUT,
" %s = %s * ( %s / %s);\n", v0, v1, v2, v1);
2161 (void) fprintf(
STDOUT,
" } else {\n");
2162 (void) fprintf(
STDOUT,
" %s = -%s * (-%s / %s);\n", v0, v1, v2, v1);
2163 (void) fprintf(
STDOUT,
" }\n");
2164 (void) fprintf(
STDOUT,
" } else {\n");
2165 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (quant)\\n\");\n");
2167 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
Node_List[out].mline[0]);
2172 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
2176 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n quantification level <%s> must be strictly positive\\n\");\n", v1);
2177 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
2178 (void) fprintf(
STDOUT,
" }\n");
2182 flag = sscanf(v1,
"%lf", &dtemp2);
2183 if ((1 == flag) && (0.0 >= dtemp2)) {
2185 (void) fprintf(
STDERR,
" quantification level <%f> must be strictly positive\n", dtemp2);
2188 if ((1 == flag) &&
ISEQUAL(1.0, dtemp2)) {
2189 (void) fprintf(
STDOUT,
" if ( 0.0 < %s ) {\n", v2);
2190 (void) fprintf(
STDOUT,
" %s = floor( %s + 0.5);\n", v0, v2);
2191 (void) fprintf(
STDOUT,
" } else {\n");
2192 (void) fprintf(
STDOUT,
" %s = -floor(-%s + 0.5);\n", v0, v2);
2193 (void) fprintf(
STDOUT,
" }\n");
2196 if ((1 == flag) && (1.0 < dtemp2)) {
2197 (void) fprintf(
STDOUT,
" if ( 0.0 < %s ) {\n", v2);
2198 (void) fprintf(
STDOUT,
" %s = %.15e * floor(( %s / %.15e) + 0.5);\n", v0, dtemp2, v2, dtemp2);
2199 (void) fprintf(
STDOUT,
" } else {\n");
2200 (void) fprintf(
STDOUT,
" %s = -%.15e * floor((-%s / %.15e) + 0.5);\n", v0, dtemp2, v2, dtemp2);
2201 (void) fprintf(
STDOUT,
" }\n");
2204 (void) fprintf(
STDOUT,
" if ( 0.0 < %s ) {\n", v1);
2205 (void) fprintf(
STDOUT,
" if ( 0.0 < %s ) {\n", v2);
2206 (void) fprintf(
STDOUT,
" %s = %s * floor(( %s / %s) + 0.5);\n", v0, v1, v2, v1);
2207 (void) fprintf(
STDOUT,
" } else {\n");
2208 (void) fprintf(
STDOUT,
" %s = -%s * floor((-%s / %s) + 0.5);\n", v0, v1, v2, v1);
2209 (void) fprintf(
STDOUT,
" }\n");
2210 (void) fprintf(
STDOUT,
" } else {\n");
2211 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (quant)\\n\");\n");
2213 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
Node_List[out].mline[0]);
2218 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
2222 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n quantification level <%s> must be strictly positive\\n\");\n", v1);
2223 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
2224 (void) fprintf(
STDOUT,
" }\n");
2231 char *s = (
char*) NULL;
2239 (void) strcpy(v0,
Node_List[out].name1);
2241 (void) strcpy(v1,
"");
2242 (void) strcpy(v2,
"");
2252 (void) strcat(v1,
" && ");
2253 (void) strcat(v2,
" && ");
2255 (void) strcat(v1,
"(0LL != ");
2256 (void) strcat(v2,
"(0LL == ");
2257 (void) strcat(v1, v3);
2258 (void) strcat(v2, v3);
2259 (void) strcat(v1,
")");
2260 (void) strcat(v2,
")");
2262 (void) fprintf(
STDOUT,
" if ( %s ) {\n", v1);
2263 (void) fprintf(
STDOUT,
" %s = 1LL;\n", v0);
2264 (void) fprintf(
STDOUT,
" } else if (%s) {\n", v2);
2265 (void) fprintf(
STDOUT,
" %s = 0LL;\n", v0);
2266 (void) fprintf(
STDOUT,
" }\n");
2272 char *s = (
char*) NULL;
2279 (void) strcpy(v0,
Node_List[out].name1);
2287 (void) strcpy(v2,
"");
2288 if (0 == strcmp(tok,
"+")) {
2290 }
else if (0 == strcmp(tok,
"-")) {
2292 (void) strcat(v2,
"-");
2294 (void) strcpy(v1, tok);
2296 (void) fprintf(
STDOUT,
" %s = ", v0);
2299 (void) fprintf(
STDOUT,
"MIN(%s%s, ", v2, v1);
2303 (void) fprintf(
STDOUT,
"MAX(%s%s, ", v2, v1);
2310 (void) strcpy(v2,
"");
2311 if (0 == strcmp(tok,
"+")) {
2313 }
else if (0 == strcmp(tok,
"-")) {
2315 (void) strcat(v2,
"-");
2317 (void) strcpy(v1, tok);
2320 (void) fprintf(
STDOUT,
"%s%s);\n", v2, v1);
2323 (void) fprintf(
STDOUT,
"%s);\n", v0);
2331 char *s = (
char*) NULL;
2342 (void) strcpy(v0,
Node_List[out].name1);
2348 (void) fprintf(
STDOUT,
" napa_msg->o = napa_packet;\n");
2350 (void) fprintf(
STDOUT,
" napa_msg->o = napa_packet;\n");
2365 (void) strcpy(tok2, tok1);
2366 if (0 == strcmp(tok1,
"after")) {
2370 (void) fprintf(
STDERR,
" keyword <%s> must be followed by a node\n", tok2);
2371 (void) fprintf(
STDOUT,
";\n");
2378 (void) fprintf(
STDERR,
" after keyword <%s>, <%s> cannot be a variable\n", tok2, tok1);
2381 (void) fprintf(
STDERR,
" after keyword <%s>, <%s> must be a defined node\n", tok2, tok1);
2384 (void) fprintf(
STDOUT,
";\n");
2390 if (0 == strcmp(tok1,
"-")) {
2391 (void) strcpy(v1,
"-");
2394 (void) strcpy(v1,
"");
2396 if (
'$' == tok1[(
LENGTH(tok1))-1L]) {
2398 (void) strcat(v1, tok1);
2402 (void) strcat(v1, v2);
2404 (void) strcpy(v2,
Var_List[n].name1);
2406 (void) strcat(v1, v2);
2408 if (0 == strcmp(v1,
"-")) {
2410 (void) fprintf(
STDERR,
" an array of pointers cannot be signed\n");
2411 (void) fprintf(
STDOUT,
";\n");
2419 (void) fprintf(
STDERR,
" a RAM cannot be a parameter of a user-defined function\n");
2420 (void) fprintf(
STDOUT,
";\n");
2425 (void) strcat(v1, v2);
2426 }
else if ((0 == strcmp(tok1,
"stdout")) || (0 == strcmp(tok1,
"stdin")) || (0 == strcmp(tok1,
"stderr"))) {
2427 (void) strcpy(tok3, tok1);
2428 (void) snprintf(tok1, (
size_t) (
LINLENGTH-1L),
"\"%s\"", tok3);
2429 (void) strcat(v1, tok1);
2431 (void) strcat(v1, tok1);
2434 (void) fprintf(
STDOUT,
",");
2436 (void) fprintf(
STDOUT,
"%s", v1);
2444 char *s = (
char*) NULL;
2449 (void) strcpy(v0,
Node_List[out].name1);
2451 (void) fprintf(
STDOUT,
" %s = ", v0);
2453 (void) fprintf(
STDOUT,
"(R_TYPE) ( ");
2455 (void) fprintf(
STDOUT,
"(I_TYPE) ( ");
2460 (void) fprintf(
STDOUT,
");\n");
2463 if (0 == strcmp(v1,
"after")) {
2467 (void) fprintf(
STDERR,
" keyword <after> must be followed by a node\n");
2468 (void) fprintf(
STDOUT,
");\n");
2475 (void) fprintf(
STDERR,
" <%s> cannot be a variable\n", v1);
2478 (void) fprintf(
STDERR,
" <%s> must be a defined node\n", v1);
2481 (void) fprintf(
STDOUT,
");\n");
2488 (void) fprintf(
STDOUT,
"%s ", v1);
2497 char *s = (
char*) NULL;
2502 (void) strcpy(v0,
Node_List[out].name1);
2504 (void) fprintf(
STDOUT,
" %s = (I_TYPE) (0 != (", v0);
2508 (void) fprintf(
STDOUT,
"));\n");
2511 if (0 == strcmp(v1,
"after")) {
2515 (void) fprintf(
STDERR,
" keyword <after> must be followed by a node\n");
2516 (void) fprintf(
STDOUT,
");\n");
2523 (void) fprintf(
STDERR,
" <%s> cannot be a variable\n", v1);
2526 (void) fprintf(
STDERR,
" <%s> must be a defined node\n", v1);
2529 (void) fprintf(
STDOUT,
");\n");
2536 (void) fprintf(
STDOUT,
"%s", v1);
2543 char *s = (
char*) NULL;
2544 char *nm = (
char*) NULL;
2549 char sgn[2] = {
'\0'};
2551 double dtemp1, dtemp2;
2555 (void) strcpy(v0, nm);
2558 if (1 != sscanf(tok,
"%li", &num)) {
2560 (void) fprintf(
STDERR,
" the number of levels is not a well-formed positive C long integer <%s>\n", tok);
2567 flag = sscanf(v2,
"%lf", &dtemp1);
2568 if ((1 == flag) &&
ISEQUAL(1.0, dtemp1)) {
2569 (void) fprintf(
STDOUT,
" dnode_%s_norm = %s;\n", nm, v1);
2571 (void) fprintf(
STDOUT,
" dnode_%s_norm = %s / %s;\n", nm, v1, v2);
2573 if (0L == (num % 2L)) {
2574 dtemp1 = 2.0 / ((double) num);
2575 dtemp2 = ((double) num)*dtemp1 * 0.5;
2576 (void) fprintf(
STDOUT,
" if ( %.15e < dnode_%s_norm ) {\n", dtemp2-dtemp1, nm);
2577 (void) fprintf(
STDOUT,
" %s = % ldLL;\n", v0, (num/2) - 1);
2578 (void) fprintf(
STDOUT,
" } else if ( %.15e > dnode_%s_norm ) {\n", -dtemp2, nm);
2579 (void) fprintf(
STDOUT,
" %s = % ldLL;\n", v0, -(num/2));
2580 (void) fprintf(
STDOUT,
" } else {\n");
2581 (void) fprintf(
STDOUT,
" %s = (I_TYPE) ((dnode_%s_norm * %.15e)", v0, nm, 1.0/dtemp1);
2582 (void) fprintf(
STDOUT,
" + ( (0.0 < dnode_%s_norm) ? 0.5 : -0.5) );\n", nm);
2583 (void) fprintf(
STDOUT,
" }\n");
2585 dtemp1 = 2.0 / ((double) (num-1L));
2586 dtemp2 = ((double) (num-2L))*dtemp1 * 0.5;
2587 (void) fprintf(
STDOUT,
" if ( %.15e < dnode_%s_norm ) {\n", dtemp2, nm);
2588 (void) fprintf(
STDOUT,
" %s = % ldLL;\n", v0, (num-1L)/2L);
2589 (void) fprintf(
STDOUT,
" } else if ( %.15e > dnode_%s_norm ) {\n", -dtemp2, nm);
2590 (void) fprintf(
STDOUT,
" %s = % ldLL;\n", v0, -(num-1L)/2L);
2591 (void) fprintf(
STDOUT,
" } else {\n");
2592 (void) fprintf(
STDOUT,
" %s = (I_TYPE) ((dnode_%s_norm * %.15e)", v0, nm, 1.0/dtemp1);
2593 (void) fprintf(
STDOUT,
" + ( (0.0 < dnode_%s_norm) ? 0.5 : -0.5) );\n", nm);
2594 (void) fprintf(
STDOUT,
" }\n");
2601 char *s = (
char*) NULL;
2606 char sgn[2] = {
'\0'};
2612 (void) strcpy(v0,
Node_List[out].name1);
2615 if (1 != sscanf(tok,
"%li", &num)) {
2617 (void) fprintf(
STDERR,
" the number of levels is not a well-formed positive C long integer <%s>\n", tok);
2624 if (0L == (num % 2L)) {
2625 dtemp1 = 2.0 / ((double) num);
2627 (void) fprintf(
STDOUT,
" if ( %ldLL < %s ) {\n", ltemp2-1L, v1);
2628 (void) fprintf(
STDOUT,
" %s = %.15e;\n", v0, 1.0-dtemp1);
2629 (void) fprintf(
STDOUT,
" } else if ( %ldLL > %s ) {\n", -ltemp2, v1);
2630 (void) fprintf(
STDOUT,
" %s = %.15e;\n", v0, -1.0);
2631 (void) fprintf(
STDOUT,
" } else {\n");
2632 (void) fprintf(
STDOUT,
" %s = ((R_TYPE) %s) * %.15e;\n", v0, v1, dtemp1);
2633 (void) fprintf(
STDOUT,
" }\n");
2635 dtemp1 = 2.0 / ((double) (num - 1L));
2637 (void) fprintf(
STDOUT,
" if ( %ldLL < %s ) {\n", ltemp2, v1);
2638 (void) fprintf(
STDOUT,
" %s = %.15e;\n", v0, 1.0);
2639 (void) fprintf(
STDOUT,
" } else if ( %ldLL > %s ) {\n", -ltemp2, v1);
2640 (void) fprintf(
STDOUT,
" %s = %.15e;\n", v0, -1.0);
2641 (void) fprintf(
STDOUT,
" } else {\n");
2642 (void) fprintf(
STDOUT,
" %s = ((R_TYPE) %s) * %.15e;\n", v0, v1, dtemp1);
2643 (void) fprintf(
STDOUT,
" }\n");
2645 flag = sscanf(v2,
"%lf", &dtemp1);
2646 if ((1 != flag) ||
ISNOTEQUAL(1.0, dtemp1)) {
2647 (void) fprintf(
STDOUT,
" %s *= %s;\n", v0, v2);
2654 char *s = (
char*) NULL;
2655 char *nm = (
char*) NULL;
2660 char sgn[2] = {
'\0'};
2662 double dtemp1, dtemp2;
2666 (void) strcpy(v0, nm);
2669 if (1 != sscanf(tok,
"%li", &num)) {
2671 (void) fprintf(
STDERR,
" the number of levels is not a well-formed positive C long integer <%s>\n", tok);
2678 flag = sscanf(v2,
"%lf", &dtemp1);
2679 if ((1 == flag) &&
ISEQUAL(1.0, dtemp1)) {
2680 (void) fprintf(
STDOUT,
" dnode_%s_norm = %s;\n", nm, v1);
2682 (void) fprintf(
STDOUT,
" dnode_%s_norm = %s / %s;\n", nm, v1, v2);
2684 dtemp1 = 1.0 / ((double) (num-1L));
2685 dtemp2 = ((double) (num-1L))*dtemp1;
2686 (void) fprintf(
STDOUT,
" if ( %.15e < dnode_%s_norm ) {\n", dtemp2, nm);
2687 (void) fprintf(
STDOUT,
" %s = %ldLL;\n", v0, (num-1L));
2688 (void) fprintf(
STDOUT,
" } else if ( 0.0 >= dnode_%s_norm ) {\n", nm);
2689 (void) fprintf(
STDOUT,
" %s = 0LL;\n", v0);
2690 (void) fprintf(
STDOUT,
" } else {\n");
2691 (void) fprintf(
STDOUT,
" %s = (I_TYPE) ((dnode_%s_norm * %.15e) + 0.5);\n", v0, nm, 1.0/dtemp1);
2692 (void) fprintf(
STDOUT,
" }\n");
2698 char *s = (
char*) NULL;
2703 char sgn[2] = {
'\0'};
2709 (void) strcpy(v0,
Node_List[out].name1);
2712 if (1 != sscanf(tok,
"%li", &num)) {
2714 (void) fprintf(
STDERR,
" the number of levels is not a well-formed positive C long integer <%s>\n", tok);
2721 dtemp1 = 1.0 / ((double) (num - 1L));
2723 (void) fprintf(
STDOUT,
" if ( %ldLL < %s ) {\n", ltemp2, v1);
2724 (void) fprintf(
STDOUT,
" %s = %.15e;\n", v0, 1.0);
2725 (void) fprintf(
STDOUT,
" } else if ( 0LL >= %s ) {\n", v1);
2726 (void) fprintf(
STDOUT,
" %s = %.15e;\n", v0, 0.0);
2727 (void) fprintf(
STDOUT,
" } else {\n");
2728 (void) fprintf(
STDOUT,
" %s = ((R_TYPE) %s) * %.15e;\n", v0, v1, dtemp1);
2729 (void) fprintf(
STDOUT,
" }\n");
2730 flag = sscanf(v2,
"%lf", &dtemp1);
2731 if ((1 != flag) ||
ISNOTEQUAL(1.0, dtemp1)) {
2732 (void) fprintf(
STDOUT,
" %s *= %s;\n", v0, v2);
2739 char *s = (
char*) NULL;
2744 char sgn1[2] = {
'\0'};
2745 char sgn2[2] = {
'\0'};
2746 char sgn3[2] = {
'\0'};
2749 (void) strcpy(v0,
Node_List[out].name1);
2756 if (0 == strcmp(s,
"")) {
2757 (void) fprintf(
STDOUT,
" %s =", v0);
2759 if (0 == strcmp(sgn1, sgn2)) {
2760 (void) fprintf(
STDOUT,
" (%s == %s);\n", v1, v2);
2762 (void) fprintf(
STDOUT,
" (%s == -%s);\n", v1, v2);
2765 (void) fprintf(
STDOUT,
" (((fabs(%s) + fabs(%s))*EPSILON) >= ", v1, v2);
2766 if ((0 == strcmp(sgn1, sgn2))) {
2767 (void) fprintf(
STDOUT,
"fabs(%s - %s));\n", v1, v2);
2769 (void) fprintf(
STDOUT,
"fabs(%s + %s));\n", v1, v2);
2775 (void) fprintf(
STDOUT,
" %s =", v0);
2777 (void) fprintf(
STDOUT,
" (%s >= ", v3);
2778 if (0 == strcmp(sgn1, sgn2)) {
2779 (void) fprintf(
STDOUT,
"labs(%s - %s));\n", v1, v2);
2781 (void) fprintf(
STDOUT,
"labs(%s + %s));\n", v1, v2);
2784 (void) fprintf(
STDOUT,
" (%s >= ", v3);
2785 if (0 == strcmp(sgn1, sgn2)) {
2786 (void) fprintf(
STDOUT,
"fabs(%s - %s));\n", v1, v2);
2788 (void) fprintf(
STDOUT,
"fabs(%s + %s));\n", v1, v2);
2797 char *s = (
char*) NULL;
2801 char sgn[2] = {
'\0'};
2803 (void) strcpy(v0,
Node_List[out].name1);
2809 (void) fprintf(
STDOUT,
" %s = ( %s >= %s ) ? 1LL : 0LL;\n", v0, v1, v2);
2815 char *s = (
char*) NULL;
2821 char sgn[2] = {
'\0'};
2824 (void) strcpy(v0,
Node_List[out].name1);
2827 (void) strcpy(v3, v1);
2830 (void) strcpy(v4, v2);
2832 (void) fprintf(
STDOUT,
" if ( (0LL != %s_set) && (0LL == %s)\n", v0, v1);
2833 (void) fprintf(
STDOUT,
" && (0LL != %s_rst) && (0LL == %s) ) {\n", v0, v2);
2834 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (latch)\\n\");\n");
2836 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
Node_List[out].mline[0]);
2841 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
2845 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n forbidden simultaneity of input transitions caused undetermination\\n\");\n");
2846 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" set: %%lld -> 0 <%s>\\n\", %s_set);\n", v3, v0);
2847 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" reset: %%lld -> 0 <%s>\\n\", %s_rst);\n", v4, v0);
2848 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
2849 (void) fprintf(
STDOUT,
" }\n");
2850 (void) fprintf(
STDOUT,
" %s_set = %s;\n", v0, v1);
2851 (void) fprintf(
STDOUT,
" %s_rst = %s;\n", v0, v2);
2852 (void) fprintf(
STDOUT,
" if ( 0LL != %s ) {\n", v2);
2853 (void) fprintf(
STDOUT,
" %s = 0LL;\n", v0);
2854 (void) fprintf(
STDOUT,
" }\n");
2855 (void) fprintf(
STDOUT,
" if ( 0LL != %s ) {\n", v1);
2856 (void) fprintf(
STDOUT,
" %s = 1LL;\n", v0);
2857 (void) fprintf(
STDOUT,
" }\n");
2863 char *s = (
char*) NULL;
2868 char sgn[2] = {
'\0'};
2871 (void) strcpy(v0,
Node_List[out].name1);
2874 if (1 == sscanf(v1,
"%li", &n)) {
2880 (void) fprintf(
STDERR,
" value <%s> of control is out of allowed range [0..%ld]\n", v1, n-1L);
2885 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v2);
2892 (void) strcpy(v3, v1);
2894 (void) fprintf(
STDOUT,
" switch (%s) {\n", v1);
2899 (void) fprintf(
STDOUT,
" default:\n");
2900 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (mux)\\n\");\n");
2902 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
Node_List[out].mline[0]);
2907 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
2912 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n unexpected value <%%lld> for control <%s>\\n\", %s);\n", v3, v1);
2914 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n unexpected value <%%lld> for control <%s>\\n\",\n", v3 );
2915 (void) fprintf(
STDOUT,
" (I_TYPE) %s);\n", v1);
2917 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
2918 (void) fprintf(
STDOUT,
" }\n");
2921 if (0 != strcmp(v2,
"void")) {
2923 (void) fprintf(
STDOUT,
" case %ldLL:\n", i);
2924 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v2);
2925 (void) fprintf(
STDOUT,
" break;\n");
2934 char *s = (
char*) NULL;
2937 char sgn[2] = {
'\0'};
2941 (void) strcpy(v0,
Node_List[out].name1);
2952 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v1);
2957 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v1);
2960 (void) fprintf(
STDOUT,
" }\n");
2961 if (((
char*) NULL) == strstr(
Node_List[out].option,
"nocheck")) {
2964 (void) fprintf(
STDOUT,
" if ( 1 < (");
2977 (void) fprintf(
STDOUT,
") ) {\n");
2978 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (merge)\\n\");\n");
2980 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
Node_List[out].mline[0]);
2985 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
2989 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n node <%s>,",
Node_List[out].name1);
2990 (void) fprintf(
STDOUT,
" no more than one input must be active at each merge:\\n\");\n");
3008 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -active- node <%s>\\n\");\n", v1);
3010 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
3011 (void) fprintf(
STDOUT,
" }\n");
3019 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -active- node <%s>\\n\");\n", v1);
3020 (void) fprintf(
STDOUT,
" } else {\n");
3021 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -inactive- node <%s>\\n\");\n", v1);
3022 (void) fprintf(
STDOUT,
" }\n");
3024 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
3025 (void) fprintf(
STDOUT,
" }\n");
3033 char *s = (
char*) NULL;
3038 char sgn[2] = {
'\0'};
3043 (void) strcpy(v0,
Node_List[out].name1);
3051 flag = sscanf(v1,
"%li", &itemp);
3054 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v2);
3059 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v3);
3062 (void) fprintf(
STDOUT,
" %s = 0LL;\n", v0);
3064 (void) fprintf(
STDOUT,
" %s = 0.0;\n", v0);
3072 (void) fprintf(
STDOUT,
" %s = ( 0LL != %s ) ? %s : %s;\n", v0, v1, v3, v2);
3075 (void) fprintf(
STDOUT,
" %s = ( 0LL != %s ) ? 0LL : %s;\n", v0, v1, v2);
3077 (void) fprintf(
STDOUT,
" %s = ( 0LL != %s ) ? 0.0 : %s;\n", v0, v1, v2);
3081 if ((w1 == w2) && (0 != strcmp(sgn,
"-"))) {
3089 char *s = (
char*) NULL;
3095 char sgn[2] = {
'\0'};
3099 (void) strcpy(nm,
Node_List[out].name1);
3100 (void) strcpy(v0,
Node_List[out].name1);
3103 if (1 != sscanf(v1,
"%li", &num1)) {
3105 (void) fprintf(
STDERR,
" decimation factor is not a well-formed positive C long integer <%s>\n", v1);
3110 (void) fprintf(
STDERR,
" decimation factor <%ld> must be larger then 1\n", num1);
3114 if (1 != sscanf(v2,
"%li", &num2)) {
3116 (void) fprintf(
STDERR,
" decimation offset is not a well-formed positive C long integer <%s>\n", v2);
3121 (void) fprintf(
STDERR,
" decimation offset <%ld> cannot be negative\n", num2);
3126 (void) fprintf(
STDERR,
" decimation offset <%ld> must be smaller then decimation factor <%ld>\n", num2, num1);
3133 (void) fprintf(
STDOUT,
" inode_%s_ctr++;\n", nm);
3134 (void) fprintf(
STDOUT,
" inode_%s_ctr = inode_%s_ctr %% %ldLL;\n", nm, nm, num1);
3135 (void) fprintf(
STDOUT,
" %s = (%ldLL == inode_%s_ctr)", v0, num2, nm);
3137 (void) fprintf(
STDOUT,
" ? %s : 0LL;\n", v3);
3139 (void) fprintf(
STDOUT,
" ? %s : 0.0;\n", v3);
3141 if ((w1 == w2) && (0 != strcmp(sgn,
"-"))) {
3149 char *s = (
char*) NULL;
3150 char *nm = (
char*) NULL;
3156 char sgn[2] = {
'\0'};
3159 (void) strcpy(v0, nm);
3165 (void) strcpy(prefix,
"inode");
3167 (void) strcpy(prefix,
"dnode");
3171 if (((
char*) NULL) != strstr(
Node_List[out].option,
"positive")) {
3172 (void) fprintf(
STDOUT,
" if ( (%s_%s_store < %s) && (%s >= %s) && (0.0L < napa_abs_loop) ) {\n", prefix, nm, v1, v2, v1);
3173 }
else if (((
char*) NULL) != strstr(
Node_List[out].option,
"negative")) {
3174 (void) fprintf(
STDOUT,
" if ( (%s_%s_store > %s) && (%s <= %s) && (0.0L < napa_abs_loop) ) {\n", prefix, nm, v1, v2, v1);
3176 (void) fprintf(
STDOUT,
" if ( (((%s_%s_store > %s) && (%s <= %s))", prefix, nm, v1, v2, v1);
3177 (void) fprintf(
STDOUT,
" || ((%s_%s_store < %s) && (%s >= %s))) && (0.0L < napa_abs_loop) ) {\n", prefix, nm, v1, v2, v1);
3179 (void) fprintf(
STDOUT,
" %s = 1LL;\n", v0);
3180 (void) fprintf(
STDOUT,
" } else {\n");
3181 (void) fprintf(
STDOUT,
" %s = 0LL;\n", v0);
3182 (void) fprintf(
STDOUT,
" }\n");
3183 (void) fprintf(
STDOUT,
" %s_%s_store = %s;\n", prefix, nm, v2);
3189 char *s = (
char*) NULL;
3190 char *nm = (
char*) NULL;
3194 char sgn[2] = {
'\0'};
3197 (void) strcpy(v0, nm);
3201 (void) strcpy(prefix,
"inode");
3203 (void) strcpy(prefix,
"dnode");
3206 if (((
char*) NULL) != strstr(
Node_List[out].option,
"dual")) {
3207 (void) fprintf(
STDOUT,
" if ( %s_%s_store < %s ) {\n", prefix, nm, v1);
3208 (void) fprintf(
STDOUT,
" %s = 1LL;\n", v0);
3209 (void) fprintf(
STDOUT,
" } else if ( %s_%s_store > %s ) {\n", prefix, nm, v1);
3210 (void) fprintf(
STDOUT,
" %s = -1LL;\n", v0);
3211 (void) fprintf(
STDOUT,
" } else {\n");
3212 (void) fprintf(
STDOUT,
" %s = 0LL;\n", v0);
3213 (void) fprintf(
STDOUT,
" }\n");
3214 }
else if (((
char*) NULL) != strstr(
Node_List[out].option,
"both")) {
3215 (void) fprintf(
STDOUT,
" if ( (%s_%s_store < %s) || (%s_%s_store > %s) ) {\n", prefix, nm, v1, prefix, nm, v1);
3216 (void) fprintf(
STDOUT,
" %s = 1LL;\n", v0);
3217 (void) fprintf(
STDOUT,
" } else {\n");
3218 (void) fprintf(
STDOUT,
" %s = 0LL;\n", v0);
3219 (void) fprintf(
STDOUT,
" }\n");
3220 }
else if (((
char*) NULL) != strstr(
Node_List[out].option,
"positive")) {
3221 (void) fprintf(
STDOUT,
" if ( %s_%s_store < %s ) {\n", prefix, nm, v1);
3222 (void) fprintf(
STDOUT,
" %s = 1LL;\n", v0);
3223 (void) fprintf(
STDOUT,
" } else {\n");
3224 (void) fprintf(
STDOUT,
" %s = 0LL;\n", v0);
3225 (void) fprintf(
STDOUT,
" }\n");
3226 }
else if (((
char*) NULL) != strstr(
Node_List[out].option,
"negative")) {
3227 (void) fprintf(
STDOUT,
" if ( %s_%s_store > %s ) {\n", prefix, nm, v1);
3228 (void) fprintf(
STDOUT,
" %s = 1LL;\n", v0);
3229 (void) fprintf(
STDOUT,
" } else {\n");
3230 (void) fprintf(
STDOUT,
" %s = 0LL;\n", v0);
3231 (void) fprintf(
STDOUT,
" }\n");
3233 (void) fprintf(
STDOUT,
" %s_%s_store = %s;\n", prefix, nm, v1);
3239 char *s = (
char*) NULL;
3240 char *nm = (
char*) NULL;
3243 char sgn[2] = {
'\0'};
3246 (void) strcpy(v0, nm);
3251 (void) fprintf(
STDOUT,
" %s = ((I_TYPE) (0LL < %s)) - ((I_TYPE) (0LL < %s));\n", v0, v1, v1);
3254 (void) fprintf(
STDOUT,
" %s = ((I_TYPE) (EPSILON < %s)) - ((I_TYPE) (-EPSILON > %s));\n", v0, v1, v1);
3261 char *s = (
char*) NULL;
3264 char sgn[2] = {
'\0'};
3266 (void) strcpy(v0,
Node_List[out].name1);
3270 (void) fprintf(
STDOUT,
" %s = (R_TYPE) (%s);\n", v0, v1);
3276 char *s = (
char*) NULL;
3279 char sgn[2] = {
'\0'};
3281 (void) strcpy(v0,
Node_List[out].name1);
3285 (void) fprintf(
STDOUT,
" %s = ( 0.0 < %s ) ? (I_TYPE) (%s + 0.5) : (I_TYPE) (%s - 0.5);\n", v0, v1, v1, v1);
3291 char *s = (
char*) NULL;
3294 char sgn[2] = {
'\0'};
3297 (void) strcpy(v0,
Node_List[out].name1);
3306 (void) fprintf(
STDERR,
" at least 2 bits must be combined to form a word\n");
3307 (void) fprintf(
STDOUT,
"\n");
3313 if (0 == strcmp(v1,
"0")) {
3315 }
else if (0 == strcmp(v1,
"1")) {
3316 (void) fprintf(
STDOUT,
" %s = 2LL", v0);
3320 (void) fprintf(
STDOUT,
" %s = (%s * 2LL)", v0, v1);
3324 }
else if (second) {
3325 if (0 == strcmp(v1,
"0")) {
3326 (void) fprintf(
STDOUT,
";\n");
3328 (void) fprintf(
STDOUT,
" + %s;\n", v1);
3332 if (0 == strcmp(v1,
"0")) {
3333 (void) fprintf(
STDOUT,
" %s = (%s * 2LL);\n", v0, v0);
3335 (void) fprintf(
STDOUT,
" %s = (%s * 2LL) + %s;\n", v0, v0, v1);
3344 char *s = (
char*) NULL;
3352 char brck[3] = {
'\0'};
3356 (void) strcpy(v0,
Node_List[out].name1);
3359 (void) strcpy(v2, v1);
3364 (void) strcpy(v3, tok);
3370 if (0 == strcmp(v4,
"false")) {
3372 (void) fprintf(
STDERR,
" ROM <%s> is never selected, no code is generated\n", v1);
3380 (void) fprintf(
STDOUT,
" if ( 0LL != %s ) {\n", v4);
3381 (void) strcpy(v5,
" ");
3383 (void) strcpy(v4,
Var_List[nv].name1);
3385 (void) fprintf(
STDOUT,
" if ( 0LL != %s ) {\n", v4);
3386 (void) strcpy(v5,
" ");
3388 if ((0 != strcmp(v4,
"1")) && (0 != strcmp(v4,
"true"))) {
3389 (void) fprintf(
STDOUT,
" if ( 0LL != %s ) {\n", v4);
3390 (void) strcpy(v5,
" ");
3392 (void) strcpy(v5,
"");
3395 (void) fprintf(
STDOUT,
"%s if ( (0LL > %s) || (%s >= %s.length) ) {\n", v5, v3, v3, v2);
3396 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\nNAPA Run Time Error: (rom)\\n\");\n", v5);
3398 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
3404 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
3408 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\n unexpected value <%%lld> for address of ROM <%s[%%lld]>\\n\", %s, %s.length);\n",
3410 (void) fprintf(
STDOUT,
"%s napa_exit(EXIT_FAILURE);\n", v5);
3411 (void) fprintf(
STDOUT,
"%s }\n", v5);
3412 (void) fprintf(
STDOUT,
"%s %s = %s.data[%s];\n", v5, v0, v2, v3);
3414 (void) fprintf(
STDOUT,
"%s if (%s == %s.address) {\n", v5, v3, v2);
3415 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\nNAPA Run Time Error: (rom)\\n\");\n", v5);
3417 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
3423 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
3427 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\n access collision at address <%%lld> of dual port ROM <%s[%%lld]>\\n\", %s, %s.length);\n",
3429 (void) fprintf(
STDOUT,
"%s napa_exit(EXIT_FAILURE);\n", v5);
3430 (void) fprintf(
STDOUT,
"%s }\n", v5);
3435 (void) fprintf(
STDOUT,
"%s %s.address = %s;\n", v5, v2, v3);
3438 if ((0 != strcmp(v4,
"1")) && (0 != strcmp(v4,
"true"))) {
3439 (void) fprintf(
STDOUT,
" }\n");
3446 char *s = (
char*) NULL;
3456 char brck[3] = {
'\0'};
3460 (void) strcpy(v0,
Node_List[out].name1);
3463 (void) strcpy(v2, v1);
3468 (void) strcpy(v3, tok);
3474 if (0 == strcmp(v4,
"false")) {
3476 (void) fprintf(
STDERR,
" RAM <%s> is never selected, no code is generated\n", v1);
3487 (void) strcpy(v5, tok);
3496 (void) fprintf(
STDOUT,
" if ( 0LL != %s ) {\n", v4);
3497 (void) strcpy(v7,
" ");
3499 (void) strcpy(v4,
Var_List[nv].name1);
3501 (void) fprintf(
STDOUT,
" if ( 0LL != %s ) {\n", v4);
3502 (void) strcpy(v7,
" ");
3504 if ((0 != strcmp(v4,
"1")) && (0 != strcmp(v4,
"true"))) {
3505 (void) fprintf(
STDOUT,
" if ( 0LL != %s ) {\n", v4);
3506 (void) strcpy(v7,
" ");
3508 (void) strcpy(v7,
"");
3511 (void) fprintf(
STDOUT,
"%s if ( (%s < 0LL) || (%s >= %s.length) ) {\n", v7, v3, v3, v2);
3512 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\nNAPA Run Time Error: (ram)\\n\");\n", v7);
3514 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
3520 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
3524 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\n unexpected value <%%lld> for address of RAM <%s[%%lld]>\\n\", %s, %s.length);\n",
3526 (void) fprintf(
STDOUT,
"%s napa_exit(EXIT_FAILURE);\n", v7);
3527 (void) fprintf(
STDOUT,
"%s }\n", v7);
3528 (void) fprintf(
STDOUT,
"%s if ( 0LL == %s ) {\n", v7, v5);
3529 (void) fprintf(
STDOUT,
"%s %s.data[%s] = %s;\n", v7, v2, v3, v6);
3530 (void) fprintf(
STDOUT,
"%s %s.flag[%s] = true;\n", v7, v2, v3);
3531 (void) fprintf(
STDOUT,
"%s %s = %s;\n", v7, v0, v6);
3532 (void) fprintf(
STDOUT,
"%s } else {\n", v7);
3533 (void) fprintf(
STDOUT,
"%s if ( !%s.flag[%s] ) {\n", v7, v2, v3);
3534 (void) fprintf(
STDOUT,
"%s %s.last = napa_abs_loop;\n", v7, v2);
3535 (void) fprintf(
STDOUT,
"%s }\n", v7);
3536 (void) fprintf(
STDOUT,
"%s %s = %s.data[%s];\n", v7, v0, v2, v3);
3537 (void) fprintf(
STDOUT,
"%s }\n", v7);
3539 (void) fprintf(
STDOUT,
"%s if ( %s == %s.address ) {\n", v7, v3, v2);
3540 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\nNAPA Run Time Error: (ram)\\n\");\n", v7);
3542 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
3548 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
3552 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\n access collision at address <%%lld> of dual port RAM <%s[%%lld]>\\n\", %s, %s.length);\n",
3554 (void) fprintf(
STDOUT,
"%s napa_exit(EXIT_FAILURE);\n", v7);
3555 (void) fprintf(
STDOUT,
"%s }\n", v7);
3560 (void) fprintf(
STDOUT,
"%s %s.address = %s;\n", v7, v2, v3);
3561 (void) fprintf(
STDOUT,
"%s %s.rw = %s;\n", v7, v2, v5);
3563 (void) fprintf(
STDOUT,
"%s if ( %s != %s.rw ) {\n", v7, v5, v2);
3564 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\nNAPA Run Time Error: (ram)\\n\");\n", v7);
3566 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n", v7,
Node_List[out].mline[0]);
3571 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
3575 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\n uncompatible R/W command for dual port RAM <%s[%%lld]>\\n\", %s.length);\n",
3577 (void) fprintf(
STDOUT,
"%s napa_exit(EXIT_FAILURE);\n", v7);
3578 (void) fprintf(
STDOUT,
"%s }\n", v7);
3581 if ((0 != strcmp(v4,
"1")) && (0 != strcmp(v4,
"true"))) {
3582 (void) fprintf(
STDOUT,
" }\n");
3589 char *s = (
char*) NULL;
3594 char sgn[2] = {
'\0'};
3600 (void) strcpy(v0,
Node_List[out].name1);
3609 (void) strcpy(v1, tok);
3616 for (i = 0L; i < n-1L; i++) {
3618 (void) strcpy(v2, tok);
3620 flag = sscanf(v2,
"%lf", &dtemp1);
3622 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v2);
3624 (void) fprintf(
STDOUT,
" %s *= %s;\n", v0, v1);
3625 if ((0 == flag) || ((1 == flag) &&
ISNOTSMALL(dtemp1))) {
3626 (void) fprintf(
STDOUT,
" %s += %s;\n", v0, v2);
3631 for (i = 0L; i < n-1L; i++) {
3633 (void) strcpy(v2, tok);
3635 flag = sscanf(v2,
"%lli", &lltemp2);
3637 (void) snprintf(v2, (
size_t) (
STRLENGTH-1L),
"%lldLL", lltemp2);
3640 (void) fprintf(
STDOUT,
" %s = %s;\n", v0, v2);
3642 (void) fprintf(
STDOUT,
" %s *= %s;\n", v0, v1);
3643 if ((0 == flag) || ((1 == flag) && (0LL != lltemp2))) {
3644 (void) fprintf(
STDOUT,
" %s += %s;\n", v0, v2);
void print_fzinv(char *str, long out)
void print_delay1(char *str, long out)
void print_toggle(char *str, long out)
void print_fzbuf(char *str, long out)
void print_triangle(char *str, long out)
void print_uadc(char *str, long out)
void print_offset(char *str, long out)
void print_muller(char *str, long out)
void print_algebra(char *str, long out)
void print_latch(char *str, long out)
void print_dyadic3(char *str, long out, long k)
void print_relay(char *str, long out)
void print_holdtrack(char *str, long out, long k)
void print_noise(char *str, long out)
void print_alu(char *str, long out)
void print_btoi(char *str, long out)
void print_osc(char *str, long out)
void print_mux(char *str, long out)
void print_square(char *str, long out)
void print_equal(char *str, long out)
void print_wsum(char *str, long out)
void print_dyadic5(char *str, long out, long k)
void print_change(char *str, long out)
void print_dyadic4(char *str, long out, long k)
void print_step(char *str, long out)
void print_itod(char *str, long out)
void print_average(char *str, long out)
void print_udac(char *str, long out)
void print_gain(char *str, long out)
void print_dac(char *str, long out)
void print_minmax(char *str, long out, long k)
void print_poly(char *str, long out)
void print_delay2(char *str, long out)
void print_rlshift(char *str, long out, long k)
void print_bwinv(char *str, long out)
void print_ram(char *str, long out)
void print_sincos(char *str, long out, long k)
void print_dyadic2(char *str, long out, long k)
void print_usertool(char *str, long out, long k)
void print_rip(char *str, long out)
void print_test(char *str, long out)
void print_trig(char *str, long out)
void print_quant(char *str, long out)
void print_differentiator(char *str, long out)
void print_integrator(char *str, long out)
void print_inv(char *str, long out)
void print_zero(char *str, long out)
void print_dyadic7(char *str, long out, long k)
void print_sign(char *str, long out)
void print_comp(char *str, long out)
void print_clock(char *str, long out)
void print_adc(char *str, long out)
void print_clip(char *str, long out)
void print_merge(char *str, long out)
void print_rect(char *str, long out)
void print_delay(char *str, long out)
void print_buf(char *str, long out)
void print_bshift(char *str, long out)
void print_dtoi(char *str, long out)
void print_dyadic0(char *str, long out, long k)
void print_rshift2(char *str, long out)
void print_rshift1(char *str, long out)
void print_delay3(char *str, long out)
void print_dyadic6(char *str, long out, long k)
void print_itob(char *str, long out)
void print_copy(char *str, long out)
void print_rom(char *str, long out)
void print_dyadic1(char *str, long out, long k)
void print_warning_location(const char *type, const unsigned long *mlin, const unsigned long *mfil)
void print_error_location(const char *type, const unsigned long *mlin, const unsigned long *mfil)
long constant_type(char *identifier)
long get_type(char *identifier)
long user_id(const char *identifier)
long array_id(const char *identifier)
long node_id(const char *identifier)
long var_id(const char *identifier)
long record_id(const char *identifier)
void process_node_error(const char *tok1)
EXTERN VAR_TYPE Var_List[2047L]
EXTERN RECORD_TYPE Record_List[127L]
EXTERN ARRAY_TYPE Array_List[63L]
EXTERN NODE_TYPE Node_List[4095L]
EXTERN USERTOOL_TYPE UserTool_List[511L]
EXTERN char * Record_Cell_File_Table[511L]
EXTERN OPCODE_TYPE Opcode_List[127L]
#define NAPA_DIGITAL_TYPE
#define DIGITAL_DATA_TYPE
char * get_token(char *str, char *tok, long keep_quotes)
char * build_name(const char *sgn, char *tok, long lr_type)
void replace_dollar(char *tok)
char * get_token_between_braces(char *str, char *brc, char *tok)
char * get_sign_and_token(char *str, char *sgn, char *tok)