--- SDL-1.2.7/src/video/mmx.h.orig 2003-08-22 07:51:19.000000000 +0200 +++ SDL-1.2.7/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 */ \ : "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