Mail Archives: djgpp/1995/10/14/14:57:26
| Xref: | news-dnh.mv.net comp.os.msdos.djgpp:2637
|
| Path: | news-dnh.mv.net!mv!news.sprintlink.net!tank.news.pipex.net!pipex!howland.reston.ans.net!news.nic.surfnet.nl!tudelft.nl!liberator.et.tudelft.nl!news
|
| From: | George van Venrooij <george AT il DOT ft DOT hse DOT nl>
|
| Newsgroups: | comp.os.msdos.djgpp
|
| Subject: | Inline-asm and optimization
|
| Date: | 14 Oct 1995 09:58:42 GMT
|
| Organization: | Hogeschool Eindhoven
|
| Lines: | 28
|
| Nntp-Posting-Host: | u86401.hi.ft.hse.nl
|
| To: | djgpp AT sun DOT soe DOT clarkson DOT edu
|
| Dj-Gateway: | from newsgroup comp.os.msdos.djgpp
|
Take a look at the followig piece of code (incomplete):
asm volatile("cdq; \
idivl %%ebx"
: "=a" (var1)
: "a" (var2), "b" (var3)
: "ax", "dx");
This worked perfectly when I wasn't optimizing, but when using -O1,
caused registers to be corrupted.
I managed to get it working by listing "bx" with the other modified
registers as well.
I found this to be a little strange. I GCC loads ebx with the value I
need, why doesn't it change it back to the value it had?
Basically my question is:
Do you have to list ALL registers (modified, in- and output) as modified?
Or am I doing something wrong here?
Thanks in advance,
George van Venrooij
george AT il DOT ft DOT hse DOT nl
- Raw text -