Steven M. Schultz wrote: > Hi - > > If you're using gcc 3.3 (as SuSE 8.2 does) and the building > of the jpeg-mmx library fails with: > > gcc -O6 -I. -c -o jdapimin.o jdapimin.c > /tmp/cc7IfzBn.s: Assembler messages: > /tmp/cc7IfzBn.s:619: Error: symbol `NOT_SUPPORTED' is already defined > gmake: *** [jdapimin.o] Error 1 >
The reason for this it that gcc inlines the assembler function mmxsupport() at 2 places, so the symbol NOT_SUPPORTED is defined twice. A fix without changing the O option is to change the global symbol to a local one. See the attached patch. Wolfgang > Here is a patch to fix the problem - it seems that -O6 is too high > and causes the module to be miscompiled somehow. Changing that to > -O2 fixes the problem: > > --- Makefile.dist 2002-04-25 09:09:18.000000000 -0700 > +++ Makefile 2003-05-29 22:00:54.000000000 -0700 > @@ -25,7 +25,7 @@ > AS= nasm > ASFLAGS = -f elf > # You may need to adjust these cc options: > -CFLAGS= -O6 -I$(srcdir) > +CFLAGS= -O2 -I$(srcdir) > # Generally, we recommend defining any configuration symbols in jconfig.h, > # NOT via -D switches here. > # However, any special defines for ansi2knr.c may be included here: > > Cheers, > Steven Schultz > > > ------------------------------------------------------- > This SF.net email is sponsored by: eBay > Get office equipment for less on eBay! > http://adfarm.mediaplex.com/ad/ck/711-11697-6916-5 > _______________________________________________ > Mjpeg-users mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/mjpeg-users >
diff -ur ../jpeg-mmx-0.1.4.org/jdapimin.c ./jdapimin.c --- ../jpeg-mmx-0.1.4.org/jdapimin.c 2000-09-19 18:04:22.000000000 +0200 +++ ./jdapimin.c 2003-05-01 14:32:10.000000000 +0200 @@ -471,16 +471,16 @@ "pushfl \n\t" //Save Eflag to stack "popl %%eax \n\t" //Get Eflag from stack "xorl %%ecx,%%eax \n\t" //Compare the new Eflag with the original Eflag - "jz NOT_SUPPORTED \n\t" //If the same, CPUID instruction is not supported, + "jz 1f \n\t" //If the same, CPUID instruction is not supported, //skip following instructions and jump to - //NOT_SUPPORTED label + //1f label "xorl %%eax,%%eax \n\t" //Set eax to zero "cpuid \n\t" //CPUID instruction (two bytes opcode) "cmpl $1,%%eax \n\t" //make sure eax return non-zero value - "jl NOT_SUPPORTED \n\t" //If eax is zero, mmx not supported + "jl 1f \n\t" //If eax is zero, mmx not supported "xorl %%eax,%%eax \n\t" //set eax to zero "incl %%eax \n\t" //Now increment eax to 1. This instruction is @@ -489,11 +489,11 @@ "andl $0x00800000,%%edx \n\t" //mask out all bits but mmx bit(24) "cmpl $0,%%edx \n\t" // 0 = mmx not supported - "jz NOT_SUPPORTED \n\t" // non-zero = Yes, mmx IS supported + "jz 1f \n\t" // non-zero = Yes, mmx IS supported "movl $1, mmx_supported \n\t" - "NOT_SUPPORTED: \n\t" + "1: \n\t" "movl $mmx_supported, %%eax" //move return value to eax Only in .: jdapimin.c~