From 91f5abc9556e3acf5b8dc9da14d6488c9bc3d629 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 22 Aug 2005 19:07:57 +0000 Subject: [PATCH] - fixed gcc-4 compilation issues (Vladimir Nadvornik ) - fixed amd64 compilation issues (Vladimir Nadvornik ) --- ChangeLog | 2 ++ configure.ac | 2 +- wrlib/x86_specific.c | 65 +++++++++++++++++++++++++++++++++------------------- 3 files changed, 44 insertions(+), 25 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9b67799c..0efcdbef 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,8 @@ Changes since version 0.92.0: argument is an absolute path - updated german translations (Torsten Marek ) - fixed WPrefs.app to find its icons when not installed under GNUstep paths +- fixed gcc-4 compilation issues (Vladimir Nadvornik ) +- fixed amd64 compilation issues (Vladimir Nadvornik ) Changes since version 0.91.0: diff --git a/configure.ac b/configure.ac index d72028bb..1915335e 100644 --- a/configure.ac +++ b/configure.ac @@ -197,7 +197,7 @@ if test "$ac_cv_prog_gcc" = yes; then AC_CACHE_CHECK(whether gcc supports x86 inline asm, ac_cv_c_inline_asm, - [AC_TRY_LINK(,[{int x; asm volatile("movl %%eax, %%ebx\n":: + [AC_TRY_LINK(,[{int x; asm volatile("movl %%eax, %%ebx\n\t pushal\n\t popal":: "m" (x),"m" (x),"m" (x),"m" (x),"m" (x),"m" (x), "m" (x),"m" (x),"m" (x),"m" (x),"m" (x),"m" (x));}], ac_cv_c_inline_asm=yes, diff --git a/wrlib/x86_specific.c b/wrlib/x86_specific.c index df2020d3..acd9503c 100644 --- a/wrlib/x86_specific.c +++ b/wrlib/x86_specific.c @@ -98,15 +98,23 @@ x86_mmx_TrueColor_32_to_16(unsigned char *image, int height, int line_offset) { - long long rrggbbaa; - long long pixel; + union { + long long rrggbbaa; + struct {short int rr, gg, bb, aa;} words; + } rrggbbaa; + + union { + long long pixel; + struct {short int rr, gg, bb, aa;} words; + } pixel; + short *tmp_err; short *tmp_nerr; int x; asm volatile ( - "pushal \n\t" + "pushl %%ebx \n\t" // pack dr, dg and db into mm6 "movl %7, %%eax \n\t" @@ -290,7 +298,7 @@ x86_mmx_TrueColor_32_to_16(unsigned char *image, ".Enda: \n\t" // THE END "emms \n\t" - "popal \n\t" + "popl %%ebx \n\t" : : "m" (image), // %0 @@ -309,17 +317,18 @@ x86_mmx_TrueColor_32_to_16(unsigned char *image, "m" (width), // %13 "m" (height), // %14 "m" (line_offset), // %15 - "m" (rrggbbaa), // %16 (access to rr) - "m" ((*((short*)(&rrggbbaa)+1))), // %17 (access to gg) - "m" ((*((short*)(&rrggbbaa)+2))), // %18 (access to bb) - "m" ((*((short*)(&rrggbbaa)+3))), // %19 (access to aa) - "m" (pixel), // %20 (access to pixel.r) - "m" ((*((short*)(&pixel)+1))), // %21 (access to pixel.g) - "m" ((*((short*)(&pixel)+2))), // %22 (access to pixel.b) - "m" ((*((short*)(&pixel)+3))), // %23 (access to pixel.a) + "m" (rrggbbaa.rrggbbaa), // %16 (access to rr) + "m" (rrggbbaa.words.gg), // %17 (access to gg) + "m" (rrggbbaa.words.bb), // %18 (access to bb) + "m" (rrggbbaa.words.aa), // %19 (access to aa) + "m" (pixel.pixel), // %20 (access to pixel.r) + "m" (pixel.words.gg), // %21 (access to pixel.g) + "m" (pixel.words.bb), // %22 (access to pixel.b) + "m" (pixel.words.aa), // %23 (access to pixel.a) "m" (tmp_err), // %24 "m" (tmp_nerr), // %25 "m" (x) // %26 + : "eax", "ecx", "edx", "esi", "edi" ); } @@ -342,8 +351,15 @@ x86_mmx_TrueColor_24_to_16(unsigned char *image, int height, int line_offset) { - long long rrggbbaa; - long long pixel; + union { + long long rrggbbaa; + struct {short int rr, gg, bb, aa;} words; + } rrggbbaa; + + union { + long long pixel; + struct {short int rr, gg, bb, aa;} words; + } pixel; short *tmp_err; short *tmp_nerr; @@ -354,7 +370,7 @@ x86_mmx_TrueColor_24_to_16(unsigned char *image, asm volatile ( - "pushal \n\t" + "pushl %%ebx \n\t" "movl %13, %%eax \n\t" // eax = width "movl %%eax, %%ebx \n\t" @@ -424,7 +440,7 @@ x86_mmx_TrueColor_24_to_16(unsigned char *image, ".Endc: \n\t" // THE END "emms \n\t" - "popal \n\t" + "popl %%ebx \n\t" : : "m" (image), // %0 @@ -443,19 +459,20 @@ x86_mmx_TrueColor_24_to_16(unsigned char *image, "m" (width), // %13 "m" (height), // %14 "m" (line_offset), // %15 - "m" (rrggbbaa), // %16 (access to rr) - "m" ((*((short*)(&rrggbbaa)+1))), // %17 (access to gg) - "m" ((*((short*)(&rrggbbaa)+2))), // %18 (access to bb) - "m" ((*((short*)(&rrggbbaa)+3))), // %19 (access to aa) - "m" (pixel), // %20 (access to pixel.r) - "m" ((*((short*)(&pixel)+1))), // %21 (access to pixel.g) - "m" ((*((short*)(&pixel)+2))), // %22 (access to pixel.b) - "m" ((*((short*)(&pixel)+3))), // %23 (access to pixel.a) + "m" (rrggbbaa.rrggbbaa), // %16 (access to rr) + "m" (rrggbbaa.words.gg), // %17 (access to gg) + "m" (rrggbbaa.words.bb), // %18 (access to bb) + "m" (rrggbbaa.words.aa), // %19 (access to aa) + "m" (pixel.pixel), // %20 (access to pixel.r) + "m" (pixel.words.gg), // %21 (access to pixel.g) + "m" (pixel.words.bb), // %22 (access to pixel.b) + "m" (pixel.words.aa), // %23 (access to pixel.a) "m" (tmp_err), // %24 "m" (tmp_nerr), // %25 "m" (x), // %26 "m" (w1), // %27 "m" (w2) // %28 + : "eax", "ecx", "edx", "esi", "edi" ); } -- 2.11.4.GIT