Files
2013-09-26 17:14:40 +02:00

285 lines
7.4 KiB
Plaintext

$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 <SDL.h>
+#include <assert.h>
#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);