diff options
Diffstat (limited to 'copt')
-rw-r--r-- | copt/copt.c | 21 | ||||
-rw-r--r-- | copt/rules.86 | 13 |
2 files changed, 12 insertions, 22 deletions
diff --git a/copt/copt.c b/copt/copt.c index 12a5ac2..24577ae 100644 --- a/copt/copt.c +++ b/copt/copt.c @@ -54,9 +54,7 @@ struct line_s { char *text; struct line_s *prev; struct line_s *next; -#ifdef KEEPCOMMENTS int comment_flg; -#endif }; @@ -196,9 +194,7 @@ static struct line_s *readlist(FILE *fp, char quit, char comment) if (quit != NOCHAR && quit == *cp) break; if (comment != NOCHAR && comment == *cp) -#ifdef KEEPCOMMENTS if (quit != NOCHAR) -#endif continue; if (*cp == '\0') continue; @@ -206,9 +202,7 @@ static struct line_s *readlist(FILE *fp, char quit, char comment) lp->text = install(cp, -1); lp->prev = last_line; lp->next = NULL; -#ifdef KEEPCOMMENTS lp->comment_flg = (comment != NOCHAR && *cp == comment); -#endif if (first_line == NULL) first_line = lp; if (last_line != NULL) @@ -677,12 +671,6 @@ static struct line_s *optline(struct line_s *cur) /* Scan through pattern texts and match them against the input file */ ins = cur; pat = rp->old; -#ifndef KEEPCOMMENTS - while (ins != NULL && pat != NULL && match(ins->text, pat->text)) { - ins = ins->next; - pat = pat->next; - } -#else while (ins != NULL && pat != NULL && ( ins->comment_flg || @@ -693,7 +681,6 @@ static struct line_s *optline(struct line_s *cur) pat = pat->next; ins = ins->next; } -#endif /* Current pattern matched input line, so replace input with new */ if (pat == NULL) { @@ -701,7 +688,6 @@ static struct line_s *optline(struct line_s *cur) lp1 = cur; cur = cur->prev; while (lp1 != ins) { -#ifdef KEEPCOMMENTS #if 0 /* I'd like to keep the comment lines but this doesn't work XXX */ if( lp1->comment_flg ) { @@ -714,7 +700,6 @@ static struct line_s *optline(struct line_s *cur) } else #endif -#endif { lp2 = lp1; lp1 = lp1->next; @@ -730,9 +715,7 @@ static struct line_s *optline(struct line_s *cur) lp2->text = subst(pat->text); lp2->next = NULL; lp2->prev = lp1; -#ifdef KEEPCOMMENTS lp2->comment_flg = 0; -#endif if (lp1 != NULL) lp1->next = lp2; else @@ -763,14 +746,11 @@ static void optimize(int backup) { struct line_s *cur, *lp; int i; -#ifdef KEEPCOMMENTS int in_asm = 0; -#endif /* Scan through all lines in the input file */ cur = infile; while (cur != NULL) { -#ifdef KEEPCOMMENTS if (cur->comment_flg || in_asm) { lp=cur->next; @@ -778,7 +758,6 @@ static void optimize(int backup) in_asm = (memcmp(cur->text+5, "ASM", 3) == 0); } else -#endif if ((lp = optline(cur)) != NULL && lp != cur->next) { for (i = 0; i < backup && lp != NULL; i++) lp = lp->prev; diff --git a/copt/rules.86 b/copt/rules.86 index b788312..f0654f4 100644 --- a/copt/rules.86 +++ b/copt/rules.86 @@ -344,7 +344,7 @@ ret jmp .%1 .%1: = -.%1 +.%1: jmp .%1 .%2: @@ -435,3 +435,14 @@ add sp,*%4 %1 %2 add sp,*%3+%4 +# And a great bug floating push/pop +push dx +push cx +push bx +push ax +pop ax +pop bx +pop cx +pop dx += +! push/pop |