From: Damon Hogan Newsgroups: comp.os.msdos.djgpp Subject: Re: Problems with DJGPP lib and grx23 Date: Wed, 22 Dec 1999 18:19:39 -0700 Organization: XMission http://www.xmission.com/ Lines: 126 Message-ID: <386178AB.78FAE8A8@pgmincorporated.com> References: <80h38o$95e$1 AT hudsucker DOT umdac DOT umu DOT se> <4 DOT 2 DOT 0 DOT 58 DOT 19991123114726 DOT 00a46520 AT hal DOT nt DOT tuwien DOT ac DOT at> <833dtxnmlt DOT fsf AT mercury DOT st DOT hmc DOT edu> <3861759A DOT 3A9243F4 AT pgmincorporated DOT com> NNTP-Posting-Host: mail.pgmincorporated.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Trace: news.xmission.com 945911989 18800 166.70.119.101 (23 Dec 1999 01:19:49 GMT) X-Complaints-To: abuse AT xmission DOT com NNTP-Posting-Date: 23 Dec 1999 01:19:49 GMT X-Mailer: Mozilla 4.6 [en] (Win98; I) X-Accept-Language: en To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com My apologies, I didn't get all the messages before, looks like there has been quite a discussion on this subject.. Was it clear? Does the GRX23UP1 file fix this problem? Damon Hogan wrote: > Since he did not write back, on this I will. I am having the same problem.. > > I cannot get the grx23 library to compile on djgpp running under > windows95/98/NT4. I have the latest gcc for djgpp 295... I have tried > everything I can think of and worked on it for days. Most everything I > have for djgpp compiles fine but this library and a few others that use > in-line assembly are having this same compile problem. (Forbidden > registers, AX, CX, DX it doesn't seem to matter.) > > gcc -c -O6 -Wall -fomit-frame-pointer -I. -I./include -I../include > -I../addons/p > rint -I../addons/bmp utils/shiftscl.c -o utils/shiftscl.o > utils/shiftscl.c: In function `_GR_shift_scanline': > utils/shiftscl.c:48: Invalid `asm' statement: > utils/shiftscl.c:48: fixed or forbidden register 2 (cx) was spilled for > class CR > EG. > utils/shiftscl.c:102: Invalid `asm' statement: > utils/shiftscl.c:102: fixed or forbidden register 2 (cx) was spilled > for > class C > REG. > make.exe[1]: *** [utils/shiftscl.o] Error 1 > make.exe[1]: Leaving directory `c:/djgpp/contrib/grx23/src' > make.exe: *** [libs] Error 2 > > C:\djgpp\contrib\grx23> > > Below is the code it blows up on (src/utils/shiftscl.c), Blowup line > below denoted with a <><>. Can you tell me what can be done so it will > compile (preferred) or > if you can at lease email me the .a library files for djgpp that would > be sufficient. > > Thanks in advance > > Damon Hogan > Sr Programmer/Analyst > PGM, Inc. > > # 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__) > asm push ds ; > asm mov bx, ws ; > asm mov cl, shift ; > asm les di, d ; > asm lds si, s ; > asm mov ch,[si] ; > asm std ; > looprv: > asm dec si ; > asm mov al, ch ; > asm mov ah, [si] ; > asm mov ch, ah ; > asm shr ax, cl ; > asm stosb ; > asm dec bx ; > asm jnz short looprv ; > asm mov al, ch ; > asm shr al, cl ; > asm stosb ; > asm pop ds ; > # else > int w = ws; > do { > --s; > *(d--) = highlowP(s)>>shift; > } while (--w); > *d = *s >> shift; > # endif > > And so it blows up on the line.. > > : "ax", "cx" > > When throwing away registers at the end of the assembly routine because the > contents of those registers has changed... > > Everything I have read so far says that this is valid... So I can't fix > something that > is supposed to work.. > > Any suggestions? > > Nate Eldredge wrote: > > > Anton Helm writes: > > > > > Is there some asm guru out there that can look into a 10-line inline asm > > > code that used to work with gcc 2.8.1 ? > > > > Post it. > > > > -- > > > > Nate Eldredge > > neldredge AT hmc DOT edu