www.delorie.com/archives/browse.cgi   search  
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 -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019