summaryrefslogtreecommitdiff
path: root/src/cmd/8g
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/8g')
-rw-r--r--src/cmd/8g/cgen.c6
-rw-r--r--src/cmd/8g/ggen.c4
2 files changed, 4 insertions, 6 deletions
diff --git a/src/cmd/8g/cgen.c b/src/cmd/8g/cgen.c
index 9c326e8ef..596824a6c 100644
--- a/src/cmd/8g/cgen.c
+++ b/src/cmd/8g/cgen.c
@@ -78,6 +78,8 @@ cgen(Node *n, Node *res)
// structs etc get handled specially
if(isfat(n->type)) {
+ if(n->type->width < 0)
+ fatal("forgot to compute width for %T", n->type);
sgen(n, res, n->type->width);
return;
}
@@ -898,7 +900,7 @@ bgen(Node *n, int true, Prog *to)
}
// make simplest on right
- if(nl->op == OLITERAL || nl->ullman < nr->ullman) {
+ if(nl->op == OLITERAL || (nl->ullman < nr->ullman && nl->ullman < UINF)) {
a = brrev(a);
r = nl;
nl = nr;
@@ -1023,8 +1025,8 @@ bgen(Node *n, int true, Prog *to)
if(nr->ullman >= UINF) {
tempname(&n1, nl->type);
tempname(&tmp, nr->type);
- cgen(nr, &tmp);
cgen(nl, &n1);
+ cgen(nr, &tmp);
regalloc(&n2, nr->type, N);
cgen(&tmp, &n2);
goto cmp;
diff --git a/src/cmd/8g/ggen.c b/src/cmd/8g/ggen.c
index 8db552493..920725c3e 100644
--- a/src/cmd/8g/ggen.c
+++ b/src/cmd/8g/ggen.c
@@ -625,12 +625,8 @@ void
cgen_div(int op, Node *nl, Node *nr, Node *res)
{
Node ax, dx, oldax, olddx;
- int rax, rdx;
Type *t;
- rax = reg[D_AX];
- rdx = reg[D_DX];
-
if(is64(nl->type))
fatal("cgen_div %T", nl->type);