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?


Hi,

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.


Ciao,
Michael.


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