[PATCH] savage: Avoid unnecessary float calculation in video display

Tormod Volden lists.tormod at gmail.com
Sat Sep 17 02:58:50 PDT 2011


From: Tormod Volden <debian.tormod at gmail.com>

There is no reason to do the division using floats as long as
the result is an integer and there is no risk of intermediate
overflow.

This is in the code for "Old" chipsets. Integer division was already
used in the parallel code for "New" chipsets.

Also fixed up the whitespace in both blocks.

Signed-off-by: Tormod Volden <debian.tormod at gmail.com>
---
 src/savage_video.c |   23 +++++++++++------------
 1 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/src/savage_video.c b/src/savage_video.c
index 7d571ad..5f08a18 100644
--- a/src/savage_video.c
+++ b/src/savage_video.c
@@ -1503,16 +1503,15 @@ SavageDisplayVideoOld(
       }
 
     if (S3_MOBILE_TWISTER_SERIES(psav->Chipset)
-        && psav->FPExpansion) {
-        drw_w = (((float)(drw_w * psav->XExp1)/(float)psav->XExp2)+1);
-        drw_h = (float)(drw_h * psav->YExp1)/(float)psav->YExp2+1;
-        dstBox->x1 = (float)(dstBox->x1 * psav->XExp1)/(float)psav->XExp2;
-        dstBox->y1 = (float)(dstBox->y1 * psav->YExp1)/(float)psav->YExp2;
+	&& psav->FPExpansion) {
+	drw_w = (drw_w * psav->XExp1) / psav->XExp2 + 1;
+	drw_h = (drw_h * psav->YExp1) / psav->YExp2 + 1;
+	dstBox->x1 = (dstBox->x1 * psav->XExp1) / psav->XExp2;
+	dstBox->y1 = (dstBox->y1 * psav->YExp1) / psav->YExp2;
 	dstBox->x2 = (dstBox->x2 * psav->XExp1) / psav->XExp2;
 	dstBox->y2 = (dstBox->y2 * psav->YExp1) / psav->YExp2;
-
-        dstBox->x1 += psav->displayXoffset;
-        dstBox->y1 += psav->displayYoffset;
+	dstBox->x1 += psav->displayXoffset;
+	dstBox->y1 += psav->displayYoffset;
 	dstBox->x2 += psav->displayXoffset;
 	dstBox->y2 += psav->displayYoffset;
     }
@@ -1668,10 +1667,10 @@ SavageDisplayVideoNew(
 	    !psav->CrtOnly &&
 	    !psav->TvOn) 
     {
-	drw_w = (drw_w * psav->XExp1)/psav->XExp2 + 1;
-	drw_h = (drw_h * psav->YExp1)/psav->YExp2 + 1;
-	dstBox->x1 = (dstBox->x1 * psav->XExp1)/psav->XExp2;
-	dstBox->y1 = (dstBox->y1 * psav->YExp1)/psav->YExp2;
+	drw_w = (drw_w * psav->XExp1) / psav->XExp2 + 1;
+	drw_h = (drw_h * psav->YExp1) / psav->YExp2 + 1;
+	dstBox->x1 = (dstBox->x1 * psav->XExp1) / psav->XExp2;
+	dstBox->y1 = (dstBox->y1 * psav->YExp1) / psav->YExp2;
 	dstBox->x2 = (dstBox->x2 * psav->XExp1) / psav->XExp2;
 	dstBox->y2 = (dstBox->y2 * psav->YExp1) / psav->YExp2;
 	dstBox->x1 += psav->displayXoffset;
-- 
1.7.4.1



More information about the xorg-devel mailing list