Paul Brook wrote:
That's exactly what my gcc4 hacks do.

It gets complicated because a x86 uses variable length insn encodings so
you don't know where insn boundaries are, and a jmp instruction is larger
than a ret instruction so it's not always possible to do a straight
replacement.
how about

void some_generated_instruction(u32 a1, u32 s2)
{
       // code
       asm volatile ( "" );
}


that will force the code to fall through to the null asm code, avoiding
premature returns.

if the code uses 'return' explicitly, turn it to a goto just before the
'asm volatile'.

We already do that. It doesn't stop gcc putting the return in the middle of the function.

Paul
void f1();
void f2();

void f(int *z, int x, int y)
{
   if (x) {
       *z = x;
       f1();
   } else {
       *z = y;
       f2();
   }
   asm volatile ("");
}

works, with gcc -O2 -fno-reorder-blocks. removing either the asm or the -f flag doesn't. No idea if it's consistent across architectures.

(the function calls are there to prevent cmov optimizations)




--
error compiling committee.c: too many arguments to function



_______________________________________________
Qemu-devel mailing list
Qemu-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/qemu-devel

Reply via email to