[uae] Re: faster blitfunc

  • From: Mustafa TUFAN <mustafa.tufan@xxxxxxxxx>
  • To: uae@xxxxxxxxxxxxx
  • Date: Fri, 30 Mar 2007 16:58:17 +0300

genblitter diff for wip4.. this should be even faster..

-GnoStiC/bronx.

Richard Drummond wrote:
Hi
On Monday 26 March 2007 07:52, Mustafa TUFAN wrote:
thanks to the following small patch to genblitter.c, i've gained ~3
fps.. (on gp2x/psp)

Thanks. I'll try that out here.

Cheers,
Rich

--- genblitter.c        Wed Mar 28 04:27:18 2007
+++ genblitter.c        Fri Mar 30 16:27:25 2007
@@ -93,11 +93,15 @@
 #endif
        if (a_is_on) printf("uae_u32 preva = 0;\n");
        if (b_is_on) printf("uae_u32 prevb = 0, srcb = b->bltbhold;\n");
-       printf("uae_u32 srcc = b->bltcdat;\n");
+       if (c_is_on) printf("uae_u32 srcc = b->bltcdat;\n");
        printf("uae_u32 dstd=0;\n");
        printf("uaecptr dstp = 0;\n");
        printf("for (j = b->vblitsize; j--; ) {\n");
-       printf("\tfor (i = 0; i < b->hblitsize; i++) {\n\t\tuae_u32 bltadat, 
srca;\n\n");
+       if (a_is_on) {
+               printf("\tfor (i = 0; i < b->hblitsize; i++) {\n\t\tuae_u32 
bltadat, srca;\n\n");
+       } else {
+               printf("\tfor (i = b->hblitsize; i--; ) {\n\t\tuae_u32 bltadat, 
srca;\n\n");
+       }
        if (c_is_on) printf("\t\tif (ptc) { srcc = chipmem_wget (ptc); ptc += 
2; }\n");
        if (b_is_on) printf("\t\tif (ptb) {\n\t\t\tuae_u32 bltbdat = 
blt_info.bltbdat = chipmem_wget (ptb); ptb += 2;\n");
        if (b_is_on) printf("\t\t\tsrcb = (((uae_u32)prevb << 16) | bltbdat) >> 
b->blitbshift;\n");
@@ -116,8 +120,8 @@
        if (c_is_on) printf("\tif (ptc) ptc += b->bltcmod;\n");
        printf("\tif (ptd) ptd += b->bltdmod;\n");
        printf("}\n");
-       if (b_is_on) printf("b->bltbhold = srcb;\n");
-       printf("b->bltcdat = srcc;\n");
+       if (b_is_on) printf("\tb->bltbhold = srcb;\n");
+       if (c_is_on) printf("\tb->bltcdat = srcc;\n");
        printf("\t\tif (dstp) chipmem_wput (dstp, dstd);\n");
 #if 0
        printf("}\n");
@@ -170,11 +174,15 @@
 #endif
        if (a_is_on) printf("uae_u32 preva = 0;\n");
        if (b_is_on) printf("uae_u32 prevb = 0, srcb = b->bltbhold;\n");
-       printf("uae_u32 srcc = b->bltcdat;\n");
+       if (c_is_on) printf("uae_u32 srcc = b->bltcdat;\n");
        printf("uae_u32 dstd=0;\n");
        printf("uaecptr dstp = 0;\n");
        printf("for (j = b->vblitsize; j--; ) {\n");
-       printf("\tfor (i = 0; i < b->hblitsize; i++) {\n\t\tuae_u32 bltadat, 
srca;\n");
+       if (a_is_on) {
+               printf("\tfor (i = 0; i < b->hblitsize; i++) {\n\t\tuae_u32 
bltadat, srca;\n");
+       } else {
+               printf("\tfor (i = b->hblitsize; i--; ) {\n\t\tuae_u32 bltadat, 
srca;\n");
+       }
        if (c_is_on) printf("\t\tif (ptc) { srcc = chipmem_wget (ptc); ptc -= 
2; }\n");
        if (b_is_on) printf("\t\tif (ptb) {\n\t\t\tuae_u32 bltbdat = 
blt_info.bltbdat = chipmem_wget (ptb); ptb -= 2;\n");
        if (b_is_on) printf("\t\t\tsrcb = ((bltbdat << 16) | prevb) >> 
b->blitdownbshift;\n");
@@ -193,8 +201,8 @@
        if (c_is_on) printf("\tif (ptc) ptc -= b->bltcmod;\n");
        printf("\tif (ptd) ptd -= b->bltdmod;\n");
        printf("}\n");
-       if (b_is_on) printf("b->bltbhold = srcb;\n");
-       printf("b->bltcdat = srcc;\n");
+       if (b_is_on) printf("\tb->bltbhold = srcb;\n");
+       if (c_is_on) printf("\tb->bltcdat = srcc;\n");
        printf("\t\tif (dstp) chipmem_wput (dstp, dstd);\n");
 #if 0
        printf("}\n");
@@ -268,4 +276,3 @@
     }
     return 0;
 }
-

Other related posts: