From: Chris Ho-Stuart Newsgroups: comp.os.msdos.djgpp Subject: asm errors compiling grx Date: 30 Sep 1999 03:25:08 GMT Organization: Queensland University of Technology, Australia Lines: 64 Distribution: world Message-ID: <7sul6k$l1n$1@dove.qut.edu.au> NNTP-Posting-Host: sky.fit.qut.edu.au Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit User-Agent: tin/pre-1.4-19990927 ("Nine While Nine") (UNIX) (SunOS/5.6 (sun4u)) To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com I am trying to compile the grx library on a pentium166 WindowsNT box using make from a dos command window. I unzip the files for grx23, cd to the src directory, and run make -f makefile.dj2 After lots of compilation it ends up with gcc -c -O6 -Wall -fomit-frame-pointer -I. -I./include -I../include -I../addons/print -I../addons/bmp user/uellia.c -o user/uellia.o Load error: no DOS memory. But that is not the problem... I restart make, and it proceeds through the uellia just fine the second time. The real problem is at this point.... gcc -c -O6 -Wall -fomit-frame-pointer -I. -I./include -I../include -I../addons/print -I../addons/bmp utils/shiftscl.c -o utils/shiftscl.o utils/shiftscl.c: In function `_GR_shift_scanline': utils/shiftscl.c:48: Invalidm' statement: utils/shiftscl.c:48: fixed or forbidden register 2 (cx) was spilled for class CREG. utils/shiftscl.c:102: Invalidm' statement: utils/shiftscl.c:102: fixed or forbidden register 2 (cx) was spilled for class CREG. make.exe: *** [utils/shiftscl.o] Error 1 Any help gratefully accepted. Further info... Line 48 in utils/shiftscl.c is the asm statement in the following context... . . . GR_int8u far *d = *(dst++) + ws; # if defined(__GNUC__) && defined(__i386__) int w = ws; /* sad but true: the x86 bytesex forces this inefficient code :( */ asm volatile ("\n" " movb (%3),%%ch \n" " jmp 1f \n" " .align 4,0x90 \n" "1: decl %3 \n" " movb %%ch,%%al \n" " movb (%3),%%ah \n" " movb %%ah,%%ch \n" " shrl %%cl,%%eax \n" " movb %%al,(%4) \n" " decl %4 \n" " decl %5 \n" " jne 1b \n" " shrb %%cl,%%ch \n" " movb %%ch,(%4) " : "=r" ((void *)s), "=r" ((void *)d), "=r" ((int)w) : "0" ((void *)s), "1" ((void *)d), "2" ((int)w), "c" ((int)shift) : "ax", "cx" ); # elif defined(__TURBOC__) . . . Thanks -- Chris Ho-Stuart