delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1999/03/29/14:57:47

Sender: nate AT cartsys DOT com
Message-ID: <36FFDB15.18C69B43@cartsys.com>
Date: Mon, 29 Mar 1999 11:57:09 -0800
From: Nate Eldredge <nate AT cartsys DOT com>
X-Mailer: Mozilla 4.08 [en] (X11; I; Linux 2.2.3 i586)
MIME-Version: 1.0
To: djgpp AT delorie DOT com
Subject: Re: Fixed or forbidden register spilled error (bloody inline asm cocking up again)
References: <7dnkt6$fis$1 AT news4 DOT svr DOT pol DOT co DOT uk>
Reply-To: djgpp AT delorie DOT com

Andrew Davidson wrote:
> 
> I'm having a neat little problem with a teeny little bit of inline
> assembler. The line goes like this:
> 
>  asm (
>  "call %%esi\n"
>    : "=a" (regpcaf), "=b" (regiyhl), "=c" (regixbc), "=d" (regspde)
>    : "a" (regpcaf),"b" (regiyhl), "c" (regixbc), "d" (regspde), "S"
> (cpuid->scratchmem), "D" (cpuid->cpumem)
>    : "%eax", "%ebx", "%ecx", "%edx", "%esi", "%edi"
>    );
> 
> (all the reg...s are #defines but fear not, they all work perfectly).

I think Shawn pegged your problem, but also note that it is technically
illegal to declare an input or output register as clobbered.  You can
delete eax thru edx from the clobber list (they aren't clobbered,
they're filled with an output), and esi and edi should be added as
outputs assigned to dummy variables.  EGCS enforces this.
-- 

Nate Eldredge
nate AT cartsys DOT com

- Raw text -


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