This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: C++: Letting compiler know asm block can call function that can throw?


On Mon, Apr 02, 2012 at 04:07:59PM +0200, Michael Matz wrote:
> On Fri, 30 Mar 2012, Jan Hubicka wrote:
> 
> > > Motion across hardreg sets/uses are not restricted.  And I would not expect
> > > an optimizing compiler to do that (it's your own fault to use hardregs in
> > > complex C code).
> > 
> > Well, the syscall sequence is an example of somehting that should be 
> > inlined into arbitrary code w/o potential risk of ICEs.
> 
> The syscall sequence doesn't consist of multiple independend instructions, 
> but rather is one asm with the right constraints.  So gcc has no chance to 
> move something between the register setup (which only is explicit after 
> reload) and the syscall instruction.  If syscall sequences were 
> implemented like this:
> 
> inline int syscall1(int number, long arg1) {
>   register int ax __asm__("eax");
>   register long di __asm__("rdi");
>   ax = number;
>   di = arg1;
>   __asm__ volatile ("syscall");
> }
> 
> _then_ we would probably get miscompilations here and there.

That is actually what is used on most targets, including x86_64 (i?86 is an
exception here, because it has single hard register constraints for most of
the interesting registers).

	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]