From: Evan Shaw Date: Thu, 7 Jan 2010 03:28:19 +0000 (-0800) Subject: 8g: float->uint64 conversion optimization X-Git-Tag: weekly.2010-01-13~54 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=a551ffe809032cce094f10aa2fe5b94bb064f6a4;p=gostls13.git 8g: float->uint64 conversion optimization Using FUCOMIP instead of the FUCOMP-FSTSW-SAHF sequence gives better performance and saves code space. R=rsc CC=golang-dev https://golang.org/cl/183139 --- diff --git a/src/cmd/8g/gsubr.c b/src/cmd/8g/gsubr.c index 4625509e9d..2b94824996 100644 --- a/src/cmd/8g/gsubr.c +++ b/src/cmd/8g/gsubr.c @@ -1350,15 +1350,11 @@ gmove(Node *f, Node *t) // if 0 > v { answer = 0 } gmove(&zerof, &f0); - gins(AFUCOMP, &f0, &f1); - gins(AFSTSW, N, &ax); - gins(ASAHF, N, N); + gins(AFUCOMIP, &f0, &f1); p1 = gbranch(optoas(OGT, types[tt]), T); // if 1<<64 <= v { answer = 0 too } gmove(&two64f, &f0); - gins(AFUCOMP, &f0, &f1); - gins(AFSTSW, N, &ax); - gins(ASAHF, N, N); + gins(AFUCOMIP, &f0, &f1); p2 = gbranch(optoas(OGT, types[tt]), T); patch(p1, pc); gins(AFMOVVP, &f0, t); // don't care about t, but will pop the stack @@ -1382,9 +1378,7 @@ gmove(Node *f, Node *t) // actual work gmove(&two63f, &f0); - gins(AFUCOMP, &f0, &f1); - gins(AFSTSW, N, &ax); - gins(ASAHF, N, N); + gins(AFUCOMIP, &f0, &f1); p2 = gbranch(optoas(OLE, types[tt]), T); gins(AFMOVVP, &f0, t); p3 = gbranch(AJMP, T);