From: "Mr R. Hopkins" Newsgroups: comp.os.msdos.djgpp,comp.os.linux.misc Subject: Floating point + inline assembly + C =? Date: Tue, 16 Dec 1997 12:37:07 +0000 Organization: Electronic Engineering Dept. Imperial College Lines: 48 Message-ID: <349675F3.2781E494@ic.ac.uk> NNTP-Posting-Host: pint.ee.ic.ac.uk Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk Hi there, I have an interesting problem: I am trying to write a short program which has some inline asm in gcc (either gcc on Linux or DJGPP on DOS). The problem I am having is passing a couple of floating point variables to the __asm__ part. What appears to happen when I use the suggested (by gcc info) method of: __asm__ ( " fblahblah %1 \n" " faddstuff %%st(2), %%st(0) \n" " fldd %2 \n" " fstd %0 \n" /* etc. etc. */ : "=r" (output_var) : "f" (input1), "f" (input2) : "%st" /* clobbers */ ); This approach does not work, since in lines (2)and (3) above notice how the floating point stack gets shuffled about. This causes the input param %2 to be further down the stack than expected, and so the value of %st which gcc inserts for param %2 is now incorrect. As a consequence, the code produces unexpecte (an undesireable) answers. Any suggestions about how I could implement this assembly in a way which I know the values of %1 and %2 are correct. Some of my ideas: -some fxch at the very start of the __asm__? -an external assembly module? -load the parameters onto the fpu stack myself? (Note the same problem occurs both under DOS as with Linux) Any help would be gladly received! -- Hoppy To reply please remove the * from my email address http://www.geocities.com/CapeCanaveral/5003/ is the place to go if you ever wanted to know how to write fractal programs or make 3D programs _____ Polite notice to people who obtain email addresses from usenet postings so that they can send innocent people junk mail GO KILL YOURSELVES YOU GITS