From a551ffe809032cce094f10aa2fe5b94bb064f6a4 Mon Sep 17 00:00:00 2001 From: Evan Shaw Date: Wed, 6 Jan 2010 19:28:19 -0800 Subject: [PATCH] 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 --- src/cmd/8g/gsubr.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/cmd/8g/gsubr.c b/src/cmd/8g/gsubr.c index 4625509e9d7..2b94824996a 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);