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