]> Cypherpunks repositories - gostls13.git/commitdiff
unsigned divide by fn()
authorKen Thompson <ken@golang.org>
Mon, 3 Nov 2008 21:27:16 +0000 (13:27 -0800)
committerKen Thompson <ken@golang.org>
Mon, 3 Nov 2008 21:27:16 +0000 (13:27 -0800)
R=r
OCL=18351
CL=18351

src/cmd/6g/gen.c

index add8ba39882820046286158962ba8d72ac31475d..633c325ddfac9e4e85eae16c6f945cc26c8f8367 100644 (file)
@@ -907,7 +907,7 @@ void
 dodiv(int op, Node *nl, Node *nr, Node *res, Node *ax, Node *dx)
 {
        int a;
-       Node n3;
+       Node n3, n4;
        Type *t;
 
        t = nl->type;
@@ -919,25 +919,25 @@ dodiv(int op, Node *nl, Node *nr, Node *res, Node *ax, Node *dx)
        }
        a = optoas(op, t);
 
-       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[t->etype])
+               if(!issigned[t->etype]) {
+                       nodconst(&n4, t, 0);
+                       gmove(&n4, dx);
+               } else
                        gins(optoas(OFOR, t), N, N);
                cgen(nr, &n3);
-               gins(a, &n3, N);
        } else {
                cgen(nr, &n3);
                cgen(nl, ax);
-               if(issigned[t->etype])
+               if(!issigned[t->etype]) {
+                       nodconst(&n4, t, 0);
+                       gmove(&n4, dx);
+               } else
                        gins(optoas(OFOR, t), N, N);
-               gins(a, &n3, N);
        }
+       gins(a, &n3, N);
        regfree(&n3);
 
        if(op == ODIV)