]> Cypherpunks repositories - gostls13.git/commitdiff
bug - divide and mod of a byte
authorKen Thompson <ken@golang.org>
Mon, 15 Sep 2008 22:03:10 +0000 (15:03 -0700)
committerKen Thompson <ken@golang.org>
Mon, 15 Sep 2008 22:03:10 +0000 (15:03 -0700)
R=r
OCL=15370
CL=15370

src/cmd/6g/gen.c

index fcd070c47851ceaee943050fd7a6a343ab878c90..34b14ec6528a00cccb0a9b1fb26bd74b2547e260 100644 (file)
@@ -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);