285 lines
7.4 KiB
Plaintext
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);
|