$NetBSD: patch-ac,v 1.3 2013/04/13 19:08:27 dholland Exp $ - Fix C syntax (string constants continued onto the next line must have a backslash) - Use the asm blocks only on platforms where they're understood. Disable the more elaborate blitter modes on other platforms until/unless someone wants to write non-asm equivalents. --- src/ddrawsdl.cpp.orig 2002-03-26 15:02:25.000000000 +0000 +++ src/ddrawsdl.cpp @@ -12,6 +12,7 @@ */ #include +#include #include "globals.h" #include "gfx.h" @@ -174,69 +175,83 @@ void UpdateFrame_h() { switch(fBlitterMode) { case 1: - __asm__ __volatile__(".align 32 - cld - rep +#if defined(__i386__) || defined(__x86_64__) + __asm__ __volatile__(".align 32\n\ + cld\n\ + rep\n\ movsw" : :"S"(dx_buffer), "D"(g_pDDSPrimary->pixels), "c"((g_pDDSPrimary->h * g_pDDSPrimary->pitch)>>1)); +#else + memcpy(g_pDDSPrimary->pixels, dx_buffer, g_pDDSPrimary->h * g_pDDSPrimary->pitch); +#endif break; case 2: - __asm__ __volatile__("pusha - xorl %%eax, %%eax - movl $448, %%ebx - emms - sum: - movq (%0, %%eax, 1), %%mm0 - movq %%mm0, %%mm1 - punpcklwd %%mm0, %%mm0 - addl $8, %%eax - punpckhwd %%mm1,%%mm1 - movq %%mm0, -16(%1, %%eax, 2) - cmpl %%ebx, %%eax - - movq %%mm1, -8(%1, %%eax, 2) - jnz sum - xorl %%eax, %%eax - - addl %2, %0 - decl %%edx - - leal (%1, %2, 4), %1 - jnz sum - emms +#if defined(__i386__) + __asm__ __volatile__("pusha\n\ + xorl %%eax, %%eax\n\ + movl $448, %%ebx \n\ + emms\n\ + sum:\n\ + movq (%0, %%eax, 1), %%mm0\n\ + movq %%mm0, %%mm1\n\ + punpcklwd %%mm0, %%mm0\n\ + addl $8, %%eax\n\ + punpckhwd %%mm1,%%mm1\n\ + movq %%mm0, -16(%1, %%eax, 2)\n\ + cmpl %%ebx, %%eax\n\ + \n\ + movq %%mm1, -8(%1, %%eax, 2)\n\ + jnz sum\n\ + xorl %%eax, %%eax\n\ + \n\ + addl %2, %0\n\ + decl %%edx\n\ + \n\ + leal (%1, %2, 4), %1\n\ + jnz sum\n\ + emms\n\ popa" : : "S"(dx_buffer), "D"(g_pDDSPrimary->pixels), "c"(g_pDDSPrimary->pitch>>1), "d"(144)); +#else + /* If you put real code here, enable the corresponding option in main() */ + assert(0); +#endif break; case 3: - __asm__ __volatile__("pusha - xorl %%eax, %%eax - movl $896, %%ebx - emms - sum3: - movq (%0, %%eax, 1), %%mm0 - movq %%mm0, %%mm1 - punpcklwd %%mm0, %%mm0 - addl $8, %%eax - punpckhwd %%mm1,%%mm1 - movq %%mm0, -16(%1, %%eax, 2) - cmpl %%ebx, %%eax - - movq %%mm1, -8(%1, %%eax, 2) - jnz sum3 - xorl %%eax, %%eax - - addl %2, %0 - decl %%edx - - leal (%1, %2, 4), %1 - jnz sum3 - emms +#if defined(__i386__) + __asm__ __volatile__("pusha\n\ + xorl %%eax, %%eax\n\ + movl $896, %%ebx \n\ + emms\n\ + sum3:\n\ + movq (%0, %%eax, 1), %%mm0\n\ + movq %%mm0, %%mm1\n\ + punpcklwd %%mm0, %%mm0\n\ + addl $8, %%eax\n\ + punpckhwd %%mm1,%%mm1\n\ + movq %%mm0, -16(%1, %%eax, 2)\n\ + cmpl %%ebx, %%eax\n\ + \n\ + movq %%mm1, -8(%1, %%eax, 2)\n\ + jnz sum3\n\ + xorl %%eax, %%eax\n\ + \n\ + addl %2, %0\n\ + decl %%edx\n\ + \n\ + leal (%1, %2, 4), %1\n\ + jnz sum3\n\ + emms\n\ popa" : : "S"(dx_buffer), "D"(g_pDDSPrimary->pixels), "c"(g_pDDSPrimary->pitch>>1), "d"(144)); +#else + /* If you put real code here, enable the corresponding option in main() */ + assert(0); +#endif break; } //Niels(adjust to suit) use the asm below, or use standard memcpy/fast_memcpy etc, updateframe_v is not implemented @@ -418,68 +433,82 @@ void UpdateFrame_v() { switch(fBlitterMode) { case 1: - __asm__ __volatile__(".align 32 - cld - rep +#if defined(__i386__) || defined(__x86_64__) + __asm__ __volatile__(".align 32\n\ + cld\n\ + rep\n\ movsw" : :"S"(dx_buffer), "D"(g_pDDSPrimary->pixels), "c"((g_pDDSPrimary->h * g_pDDSPrimary->pitch)>>1)); +#else + memcpy(g_pDDSPrimary->pixels, dx_buffer, g_pDDSPrimary->h * g_pDDSPrimary->pitch); +#endif break; case 2: // double scanlines - __asm__ __volatile__("pusha - xorl %%eax, %%eax - movl $288, %%ebx - emms - sumb: - movq (%0, %%eax, 1), %%mm0 - movq %%mm0, %%mm1 - punpcklwd %%mm0, %%mm0 - addl $8, %%eax - punpckhwd %%mm1,%%mm1 - movq %%mm0, -16(%1, %%eax, 2) - cmpl %%ebx, %%eax - - movq %%mm1, -8(%1, %%eax, 2) - jnz sumb - xorl %%eax, %%eax - - addl %2, %0 - decl %%edx - - leal (%1, %2, 4), %1 - jnz sumb - emms +#if defined(__i386__) + __asm__ __volatile__("pusha\n\ + xorl %%eax, %%eax\n\ + movl $288, %%ebx \n\ + emms\n\ + sumb:\n\ + movq (%0, %%eax, 1), %%mm0\n\ + movq %%mm0, %%mm1\n\ + punpcklwd %%mm0, %%mm0\n\ + addl $8, %%eax\n\ + punpckhwd %%mm1,%%mm1\n\ + movq %%mm0, -16(%1, %%eax, 2)\n\ + cmpl %%ebx, %%eax\n\ + \n\ + movq %%mm1, -8(%1, %%eax, 2)\n\ + jnz sumb\n\ + xorl %%eax, %%eax\n\ + \n\ + addl %2, %0\n\ + decl %%edx\n\ + \n\ + leal (%1, %2, 4), %1\n\ + jnz sumb\n\ + emms\n\ popa" : : "S"(dx_buffer), "D"(g_pDDSPrimary->pixels), "c"(g_pDDSPrimary->pitch>>1), "d"(224)); +#else + /* If you put real code here, enable the corresponding option in main() */ + assert(0); +#endif break; case 3: // double stretch mode - __asm__ __volatile__("pusha - xorl %%eax, %%eax - movl $576, %%ebx - emms - sumc: - movq (%0, %%eax, 1), %%mm0 - movq %%mm0, %%mm1 - punpcklwd %%mm0, %%mm0 - addl $8, %%eax - punpckhwd %%mm1,%%mm1 - movq %%mm0, -16(%1, %%eax, 2) - cmpl %%ebx, %%eax - - movq %%mm1, -8(%1, %%eax, 2) - jnz sumc - xorl %%eax, %%eax - - addl %2, %0 - decl %%edx - - leal (%1, %2, 4), %1 - jnz sumc - emms +#if defined(__i386__) + __asm__ __volatile__("pusha\n\ + xorl %%eax, %%eax\n\ + movl $576, %%ebx \n\ + emms\n\ + sumc:\n\ + movq (%0, %%eax, 1), %%mm0\n\ + movq %%mm0, %%mm1\n\ + punpcklwd %%mm0, %%mm0\n\ + addl $8, %%eax\n\ + punpckhwd %%mm1,%%mm1\n\ + movq %%mm0, -16(%1, %%eax, 2)\n\ + cmpl %%ebx, %%eax\n\ + \n\ + movq %%mm1, -8(%1, %%eax, 2)\n\ + jnz sumc\n\ + xorl %%eax, %%eax\n\ + \n\ + addl %2, %0\n\ + decl %%edx\n\ + \n\ + leal (%1, %2, 4), %1\n\ + jnz sumc\n\ + emms\n\ popa" : : "S"(dx_buffer), "D"(g_pDDSPrimary->pixels), "c"(g_pDDSPrimary->pitch>>1), "d"(224)); +#else + /* If you put real code here, enable the corresponding option in main() */ + assert(0); +#endif break; } SDL_Flip(g_pDDSPrimary);