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.

Reply via email to