Re: [AD] Using memmove in blit()?

[ Thread Index | Date Index | More lists.liballeg.org/allegro-developers Archives ]


On Monday 30 January 2006 23:49, Evert Glebbeek wrote:
> On Sunday 22 January 2006 21:03, George Foot wrote:
> > On the ARM architecture (GP2X), memcpy is about a million times faster
> > than Allegro's normal blit (ok, maybe only about 2 times faster...).
> > This is for screen-to-screen blitting, which is just a normal linear
> > bitmap but in uncached memory, and accessed through mmapping.
> 
> It seems that on the Mac, the memcpy version is also noticably faster 
> [http://www.allegro.cc/forums/thread/562923#target]. So as far as I can 
> see that brings the score to `some systems benefit a lot' and `some 
> systems don't care at all.'
> Anyone opposed to applying (a cleaned up version of) the patch?

Apparently no one objected, but I'm reattaching the patch anyway before I 
apply it.

Serge Semashko: please check how ths patch fares on your Nokia. Does it 
offer a speed increase there too?

Evert
Index: src/c/cblit.h
===================================================================
--- src/c/cblit.h	(revision 5662)
+++ src/c/cblit.h	(working copy)
@@ -45,6 +45,8 @@
 
 
 
+#define USE_MEMMOVE
+
 /* _linear_blit:
  *  Normal forward blitting for linear bitmaps.
  */
@@ -60,6 +62,7 @@
       PIXEL_PTR s = OFFSET_PIXEL_PTR(bmp_read_line(src, sy + y), sx);
       PIXEL_PTR d = OFFSET_PIXEL_PTR(bmp_write_line(dst, dy + y), dx);
 
+      #ifndef USE_MEMMOVE
       for (x = w - 1; x >= 0; INC_PIXEL_PTR(s), INC_PIXEL_PTR(d), x--) {
 	 unsigned long c;
 
@@ -69,6 +72,9 @@
 	 bmp_select(dst);
 	 PUT_PIXEL(d, c);
       }
+      #else
+      memmove(d, s, w * sizeof *s);
+      #endif
    }
 
    bmp_unwrite_line(src);
@@ -77,6 +83,8 @@
 
 
 
+#undef USE_MEMMOVE
+
 /* _linear_blit_backward:
  *  Reverse blitting routine, for overlapping linear bitmaps.
  */
@@ -92,6 +100,7 @@
       PIXEL_PTR s = OFFSET_PIXEL_PTR(bmp_read_line(src, sy + y), sx + w - 1);
       PIXEL_PTR d = OFFSET_PIXEL_PTR(bmp_write_line(dst, dy + y), dx + w - 1);
 
+      #ifndef USE_MEMMOVE
       for (x = w - 1; x >= 0; DEC_PIXEL_PTR(s), DEC_PIXEL_PTR(d), x--) {
 	 unsigned long c;
 
@@ -101,6 +110,9 @@
 	 bmp_select(dst);
 	 PUT_PIXEL(d, c);
       }
+      #else
+      memmove(d, s, w * sizeof *s);
+      #endif
    }
 
    bmp_unwrite_line(src);


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/