mirror of https://github.com/golang/go.git
parent
6f38063369
commit
5d5e9f74cb
|
|
@ -1001,26 +1001,34 @@ dodiv(int op, Node *nl, Node *nr, Node *res, Node *ax, Node *dx)
|
|||
{
|
||||
int a;
|
||||
Node n3;
|
||||
Type *t;
|
||||
|
||||
a = optoas(op, nl->type);
|
||||
t = nl->type;
|
||||
if(t->width == 1) {
|
||||
if(issigned[t->etype])
|
||||
t = types[TINT32];
|
||||
else
|
||||
t = types[TUINT32];
|
||||
}
|
||||
a = optoas(op, t);
|
||||
|
||||
if(!issigned[nl->type->etype]) {
|
||||
nodconst(&n3, nl->type, 0);
|
||||
if(!issigned[t->etype]) {
|
||||
nodconst(&n3, t, 0);
|
||||
gmove(&n3, dx);
|
||||
}
|
||||
|
||||
regalloc(&n3, nr->type, N);
|
||||
if(nl->ullman >= nr->ullman) {
|
||||
cgen(nl, ax);
|
||||
if(issigned[nl->type->etype])
|
||||
gins(optoas(OFOR, nl->type), N, N);
|
||||
if(issigned[t->etype])
|
||||
gins(optoas(OFOR, t), N, N);
|
||||
cgen(nr, &n3);
|
||||
gins(a, &n3, N);
|
||||
} else {
|
||||
cgen(nr, &n3);
|
||||
cgen(nl, ax);
|
||||
if(issigned[nl->type->etype])
|
||||
gins(optoas(OFOR, nl->type), N, N);
|
||||
if(issigned[t->etype])
|
||||
gins(optoas(OFOR, t), N, N);
|
||||
gins(a, &n3, N);
|
||||
}
|
||||
regfree(&n3);
|
||||
|
|
|
|||
Loading…
Reference in New Issue