Commit 5d5e9f74 authored by Ken Thompson's avatar Ken Thompson

bug - divide and mod of a byte

R=r
OCL=15370
CL=15370
parent 6f380633
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment