X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f From: RayeR Newsgroups: comp.os.msdos.djgpp Subject: Re: Using inline asm Date: Sun, 28 Oct 2007 19:46:23 -0700 Organization: http://groups.google.com Lines: 24 Message-ID: <1193625983.368281.325560@57g2000hsv.googlegroups.com> References: <471FEAC8 DOT 5179 DOT 2FAB88DB AT gerritvn DOT gpvno DOT co DOT za> <200710250120 DOT l9P1KEb2032374 AT envy DOT delorie DOT com> <1193303455 DOT 688747 DOT 180190 AT 50g2000hsm DOT googlegroups DOT com> <200710251524 DOT l9PFOeNi022585 AT envy DOT delorie DOT com> NNTP-Posting-Host: 89.176.103.47 Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" X-Trace: posting.google.com 1193625983 17849 127.0.0.1 (29 Oct 2007 02:46:23 GMT) X-Complaints-To: groups-abuse AT google DOT com NNTP-Posting-Date: Mon, 29 Oct 2007 02:46:23 +0000 (UTC) In-Reply-To: <200710251524.l9PFOeNi022585@envy.delorie.com> User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.8.1.6) Gecko/20070802 SeaMonkey/1.1.4,gzip(gfe),gzip(gfe) Complaints-To: groups-abuse AT google DOT com Injection-Info: 57g2000hsv.googlegroups.com; posting-host=89.176.103.47; posting-account=ps2QrAMAAAA6_jCuRt2JEIpn5Otqf_w0 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: djgpp AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk > In the case of gcc, it means "changes in a way that is not known to > gcc". GCC will make no assumptions about the contents of the register > after the asm. Thanks all for explanation, so if I understand well, the example by Peter show it right: >asm("cpuid" : "=a" (eax) : "a" (level) : "ebx", "ecx", "edx"); The last part of asm block lists the "clobbered" registers which was changed by CPUID and we need to tell GCC to restore them automatically - so no push/pop needed around. eax is excluded because it is input/output parameter so GCC knows it was changed because it had to put the value from a variable to eax. When I needed some inline asm i looked for examples on the internet and not all of it was using the clobber list so it was confusing. I'll have to check my src if I not forget it somewhere but I think I was paranoic and used push/pop instead..