فهرست منبع

Add -- unroll loops

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7314 8c9fc860-2736-0410-a75d-ab315db34111
eth.metacore 8 سال پیش
والد
کامیت
160346310c
2فایلهای تغییر یافته به همراه14 افزوده شده و 8 حذف شده
  1. 7 4
      source/AMD64.Raster.Mod
  2. 7 4
      source/I386.Raster.Mod

+ 7 - 4
source/AMD64.Raster.Mod

@@ -3095,7 +3095,7 @@ MODULE Raster; (** non-portable *)	(* eos, TF  **)
 
 	(** add components of two (faded) images **)
 	PROCEDURE Add* (i, j, res: Image);
-		VAR y, x, ibit, jbit, rbit, k: LONGINT; iadr, jadr, radr: ADDRESS; ipix, jpix, rpix: Pixel;
+		VAR y, x, ibit, jbit, rbit: LONGINT; iadr, jadr, radr: ADDRESS; ipix, jpix, rpix: Pixel;
 	BEGIN
 		ASSERT((i.width = j.width) & (i.height = j.height) & (i.width <= res.width) & (i.height <= res.height), 100);
 		y := 0;
@@ -3103,9 +3103,12 @@ MODULE Raster; (** non-portable *)	(* eos, TF  **)
 			x := 0; iadr := i.adr + y * i.bpr; ibit := 0; jadr := j.adr + y * j.bpr; jbit := 0; radr := res.adr + y * res.bpr; rbit := 0;
 			WHILE x < i.width DO
 				i.fmt.unpack(i.fmt, iadr, ibit, ipix); j.fmt.unpack(j.fmt, jadr, jbit, jpix);
-				FOR k := 0 TO 3 DO
-					rpix[k] := Clamp[ORD(ipix[k]) + ORD(jpix[k])]
-				END;
+
+				rpix[0] := Clamp[ORD(ipix[0]) + ORD(jpix[0])];
+				rpix[1] := Clamp[ORD(ipix[1]) + ORD(jpix[1])];
+				rpix[2] := Clamp[ORD(ipix[2]) + ORD(jpix[2])];
+				rpix[3] := Clamp[ORD(ipix[3]) + ORD(jpix[3])];
+
 				res.fmt.pack(res.fmt, radr, rbit, rpix);
 				ibit := ibit + i.fmt.bpp; INC(iadr, ibit); ibit := ibit MOD 8;
 				jbit := jbit + j.fmt.bpp; INC(jadr, jbit); jbit := jbit MOD 8;

+ 7 - 4
source/I386.Raster.Mod

@@ -3303,7 +3303,7 @@ MODULE Raster; (** non-portable *)	(* eos, TF  **)
 
 	(** add components of two (faded) images **)
 	PROCEDURE Add* (i, j, res: Image);
-		VAR y, x, ibit, jbit, rbit, k: LONGINT; iadr, jadr, radr: ADDRESS; ipix, jpix, rpix: Pixel;
+		VAR y, x, ibit, jbit, rbit: LONGINT; iadr, jadr, radr: ADDRESS; ipix, jpix, rpix: Pixel;
 	BEGIN
 		ASSERT((i.width = j.width) & (i.height = j.height) & (i.width <= res.width) & (i.height <= res.height), 100);
 		y := 0;
@@ -3311,9 +3311,12 @@ MODULE Raster; (** non-portable *)	(* eos, TF  **)
 			x := 0; iadr := i.adr + y * i.bpr; ibit := 0; jadr := j.adr + y * j.bpr; jbit := 0; radr := res.adr + y * res.bpr; rbit := 0;
 			WHILE x < i.width DO
 				i.fmt.unpack(i.fmt, iadr, ibit, ipix); j.fmt.unpack(j.fmt, jadr, jbit, jpix);
-				FOR k := 0 TO 3 DO
-					rpix[k] := Clamp[ORD(ipix[k]) + ORD(jpix[k])]
-				END;
+
+				rpix[0] := Clamp[ORD(ipix[0]) + ORD(jpix[0])];
+				rpix[1] := Clamp[ORD(ipix[1]) + ORD(jpix[1])];
+				rpix[2] := Clamp[ORD(ipix[2]) + ORD(jpix[2])];
+				rpix[3] := Clamp[ORD(ipix[3]) + ORD(jpix[3])];
+
 				res.fmt.pack(res.fmt, radr, rbit, rpix);
 				ibit := ibit + i.fmt.bpp; INC(iadr, ibit); ibit := ibit MOD 8;
 				jbit := jbit + j.fmt.bpp; INC(jadr, jbit); jbit := jbit MOD 8;