From 2dc6771ef615a383e90ced2ba7dbf0258c9238fe Mon Sep 17 00:00:00 2001 From: Jakub Bogusz Date: Sun, 9 Nov 2003 13:58:49 +0000 Subject: [PATCH] - added mmx-constraints patch: use strict contraints for MMX inline asm arguments - now it's possible to build with new gcc - added workaround for automake to kill unnecessary libstdc++ dependency - release 3 Changed files: SDL-mmx-constraints.patch -> 1.1 --- SDL-mmx-constraints.patch | 208 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 SDL-mmx-constraints.patch diff --git a/SDL-mmx-constraints.patch b/SDL-mmx-constraints.patch new file mode 100644 index 0000000..e4dc8e3 --- /dev/null +++ b/SDL-mmx-constraints.patch @@ -0,0 +1,208 @@ +--- 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 -- 2.44.0