Prog *p1, *p2, *p3;
if(debug['g']) {
- dump("\ncgen-l", res);
+ dump("\ncgen-res", res);
dump("cgen-r", n);
}
if(n == N || n->type == T)
bgen(Node *n, int true, Prog *to)
{
long lno;
- int et, a, b;
+ int et, a;
Node *nl, *nr, *r;
- Node n1, n2, tmp;
+ Node n1, n2;
Prog *p1, *p2;
if(n == N)
}
a = optoas(a, nr->type);
- if(nr->addable) {
- regalloc(&n1, nl->type, N);
- cgen(nl, &n1);
- b = optoas(OCMP, nr->type);
-
- switch(b) {
- case ACMPQ:
- if(nr->op == OLITERAL)
- if(nr->val.vval >= (1LL<<32))
- goto dolit;
-
- case AUCOMISS:
- if(nr->op == OLITERAL)
- goto dolit;
- if(nr->op == ONAME)
- goto dolit;
- }
-
- gins(b, &n1, nr);
- patch(gbranch(a, nr->type), to);
- regfree(&n1);
- break;
-
- dolit:
- regalloc(&n2, nr->type, N);
- cgen(nr, &n2);
- gins(b, &n1, &n2);
- patch(gbranch(a, nr->type), to);
- regfree(&n2);
- regfree(&n1);
- break;
- }
-
- tempname(&tmp, nr->type);
- cgen(nr, &tmp);
-
regalloc(&n1, nl->type, N);
cgen(nl, &n1);
- gins(optoas(OCMP, nr->type), &n1, &tmp);
+ regalloc(&n2, nr->type, N);
+ cgen(nr, &n2);
+
+ gins(optoas(OCMP, nr->type), &n1, &n2);
patch(gbranch(a, nr->type), to);
+
regfree(&n1);
+ regfree(&n2);
break;
}
goto ret;
$$ = nod(OLIST, $1, $3);
}
+/*
+ * need semi in front NO
+ * need semi in back NO
+ */
Astmt:
complex_stmt
+| compound_stmt
+/*
+ * need semi in front NO
+ * need semi in back YES
+ */
Bstmt:
semi_stmt
| common_dcl
+/*
+ * need semi in front YES
+ * need semi in back YES
+ */
Cstmt:
simple_stmt
+/*
+ * statement list that need semi in back NO
+ */
Astmt_list_r:
Astmt
| Astmt_list_r Astmt
$$ = N;
}
+/*
+ * statement list that need semi in back YES
+ */
Bstmt_list_r:
Bstmt
| Cstmt