--- /dev/null
+--- SDL-1.2.6/src/video/mmx.h.orig 2003-08-22 07:51:19.000000000 +0200
++++ SDL-1.2.6/src/video/mmx.h 2003-11-09 13:49:35.270218296 +0100
+@@ -246,15 +246,37 @@
+ printf(#op "_i2r(" #imm "=0x%08x%08x, ", \
+ mmx_trace.d[1], mmx_trace.d[0]); \
+ __asm__ __volatile__ ("movq %%" #reg ", %0" \
+- : "=X" (mmx_trace) \
++ : "=m" (mmx_trace) \
+ : /* nothing */ ); \
+ printf(#reg "=0x%08x%08x) => ", \
+ mmx_trace.d[1], mmx_trace.d[0]); \
+ __asm__ __volatile__ (#op " %0, %%" #reg \
+ : /* nothing */ \
+- : "X" (imm)); \
++ : "i" (imm)); \
+ __asm__ __volatile__ ("movq %%" #reg ", %0" \
+- : "=X" (mmx_trace) \
++ : "=m" (mmx_trace) \
++ : /* nothing */ ); \
++ printf(#reg "=0x%08x%08x\n", \
++ mmx_trace.d[1], mmx_trace.d[0]); \
++ }
++
++/* 32 bits or less */
++#define mmx_m2r32(op, mem, reg) \
++ { \
++ mmx_t mmx_trace; \
++ mmx_trace = (mem); \
++ printf(#op "_m2r(" #mem "=0x%08x%08x, ", \
++ mmx_trace.d[1], mmx_trace.d[0]); \
++ __asm__ __volatile__ ("movq %%" #reg ", %0" \
++ : "=m" (mmx_trace) \
++ : /* nothing */ ); \
++ printf(#reg "=0x%08x%08x) => ", \
++ mmx_trace.d[1], mmx_trace.d[0]); \
++ __asm__ __volatile__ (#op " %0, %%" #reg \
++ : /* nothing */ \
++ : "mr" (mem)); \
++ __asm__ __volatile__ ("movq %%" #reg ", %0" \
++ : "=m" (mmx_trace) \
+ : /* nothing */ ); \
+ printf(#reg "=0x%08x%08x\n", \
+ mmx_trace.d[1], mmx_trace.d[0]); \
+@@ -267,25 +289,45 @@
+ printf(#op "_m2r(" #mem "=0x%08x%08x, ", \
+ mmx_trace.d[1], mmx_trace.d[0]); \
+ __asm__ __volatile__ ("movq %%" #reg ", %0" \
+- : "=X" (mmx_trace) \
++ : "=m" (mmx_trace) \
+ : /* nothing */ ); \
+ printf(#reg "=0x%08x%08x) => ", \
+ mmx_trace.d[1], mmx_trace.d[0]); \
+ __asm__ __volatile__ (#op " %0, %%" #reg \
+ : /* nothing */ \
+- : "X" (mem)); \
++ : "m" (mem)); \
+ __asm__ __volatile__ ("movq %%" #reg ", %0" \
+- : "=X" (mmx_trace) \
++ : "=m" (mmx_trace) \
+ : /* nothing */ ); \
+ printf(#reg "=0x%08x%08x\n", \
+ mmx_trace.d[1], mmx_trace.d[0]); \
+ }
+
++/* 32 bits or less */
++#define mmx_r2m32(op, reg, mem) \
++ { \
++ mmx_t mmx_trace; \
++ __asm__ __volatile__ ("movq %%" #reg ", %0" \
++ : "=m" (mmx_trace) \
++ : /* nothing */ ); \
++ printf(#op "_r2m(" #reg "=0x%08x%08x, ", \
++ mmx_trace.d[1], mmx_trace.d[0]); \
++ mmx_trace = (mem); \
++ printf(#mem "=0x%08x%08x) => ", \
++ mmx_trace.d[1], mmx_trace.d[0]); \
++ __asm__ __volatile__ (#op " %%" #reg ", %0" \
++ : "=mr" (mem) \
++ : /* nothing */ ); \
++ mmx_trace = (mem); \
++ printf(#mem "=0x%08x%08x\n", \
++ mmx_trace.d[1], mmx_trace.d[0]); \
++ }
++
+ #define mmx_r2m(op, reg, mem) \
+ { \
+ mmx_t mmx_trace; \
+ __asm__ __volatile__ ("movq %%" #reg ", %0" \
+- : "=X" (mmx_trace) \
++ : "=m" (mmx_trace) \
+ : /* nothing */ ); \
+ printf(#op "_r2m(" #reg "=0x%08x%08x, ", \
+ mmx_trace.d[1], mmx_trace.d[0]); \
+@@ -293,7 +335,7 @@
+ printf(#mem "=0x%08x%08x) => ", \
+ mmx_trace.d[1], mmx_trace.d[0]); \
+ __asm__ __volatile__ (#op " %%" #reg ", %0" \
+- : "=X" (mem) \
++ : "=m" (mem) \
+ : /* nothing */ ); \
+ mmx_trace = (mem); \
+ printf(#mem "=0x%08x%08x\n", \
+@@ -304,18 +346,18 @@
+ { \
+ mmx_t mmx_trace; \
+ __asm__ __volatile__ ("movq %%" #regs ", %0" \
+- : "=X" (mmx_trace) \
++ : "=m" (mmx_trace) \
+ : /* nothing */ ); \
+ printf(#op "_r2r(" #regs "=0x%08x%08x, ", \
+ mmx_trace.d[1], mmx_trace.d[0]); \
+ __asm__ __volatile__ ("movq %%" #regd ", %0" \
+- : "=X" (mmx_trace) \
++ : "=m" (mmx_trace) \
+ : /* nothing */ ); \
+ printf(#regd "=0x%08x%08x) => ", \
+ mmx_trace.d[1], mmx_trace.d[0]); \
+ __asm__ __volatile__ (#op " %" #regs ", %" #regd); \
+ __asm__ __volatile__ ("movq %%" #regd ", %0" \
+- : "=X" (mmx_trace) \
++ : "=m" (mmx_trace) \
+ : /* nothing */ ); \
+ printf(#regd "=0x%08x%08x\n", \
+ mmx_trace.d[1], mmx_trace.d[0]); \
+@@ -333,8 +375,8 @@
+ __asm__ __volatile__ ("movq %0, %%mm0\n\t" \
+ #op " %1, %%mm0\n\t" \
+ "movq %%mm0, %0" \
+- : "=X" (memd) \
+- : "X" (mems)); \
++ : "=my" (memd) \
++ : "my" (mems)); \
+ mmx_trace = (memd); \
+ printf(#memd "=0x%08x%08x\n", \
+ mmx_trace.d[1], mmx_trace.d[0]); \
+@@ -348,16 +390,28 @@
+ #define mmx_i2r(op, imm, reg) \
+ __asm__ __volatile__ (#op " %0, %%" #reg \
+ : /* nothing */ \
+- : "X" (imm) )
++ : "i" (imm) )
++
++/* 32 bits or less */
++#define mmx_m2r32(op, mem, reg) \
++ __asm__ __volatile__ (#op " %0, %%" #reg \
++ : /* nothing */ \
++ : "mr" (mem))
+
+ #define mmx_m2r(op, mem, reg) \
+ __asm__ __volatile__ (#op " %0, %%" #reg \
+ : /* nothing */ \
+- : "X" (mem))
++ : "m" (mem))
++
++/* 32 bits or less */
++#define mmx_r2m32(op, reg, mem) \
++ __asm__ __volatile__ (#op " %%" #reg ", %0" \
++ : "=mr" (mem) \
++ : /* nothing */ )
+
+ #define mmx_r2m(op, reg, mem) \
+ __asm__ __volatile__ (#op " %%" #reg ", %0" \
+- : "=X" (mem) \
++ : "=m" (mem) \
+ : /* nothing */ )
+
+ #define mmx_r2r(op, regs, regd) \
+@@ -367,8 +421,8 @@
+ __asm__ __volatile__ ("movq %0, %%mm0\n\t" \
+ #op " %1, %%mm0\n\t" \
+ "movq %%mm0, %0" \
+- : "=X" (memd) \
+- : "X" (mems))
++ : "=my" (memd) \
++ : "my" (mems))
+
+ #endif
+
+@@ -383,8 +437,8 @@
+ #define movq(vars, vard) \
+ __asm__ __volatile__ ("movq %1, %%mm0\n\t" \
+ "movq %%mm0, %0" \
+- : "=X" (vard) \
+- : "X" (vars))
++ : "=my" (vard) \
++ : "my" (vars))
+
+
+ /* 1x32 MOVe Doubleword
+@@ -392,14 +446,14 @@
+ but is most useful for moving things between
+ mmx registers and ordinary registers)
+ */
+-#define movd_m2r(var, reg) mmx_m2r(movd, var, reg)
+-#define movd_r2m(reg, var) mmx_r2m(movd, reg, var)
++#define movd_m2r(var, reg) mmx_m2r32(movd, var, reg)
++#define movd_r2m(reg, var) mmx_r2m32(movd, reg, var)
+ #define movd_r2r(regs, regd) mmx_r2r(movd, regs, regd)
+ #define movd(vars, vard) \
+ __asm__ __volatile__ ("movd %1, %%mm0\n\t" \
+ "movd %%mm0, %0" \
+- : "=X" (vard) \
+- : "X" (vars))
++ : "=mr" (vard) \
++ : "mr" (vars))
+
+
+ /* 2x32, 4x16, and 8x8 Parallel ADDs