On Wed, 8 Feb 2006, Blue Swirl wrote:

Hi,

The last problem means that gcc decided to make a leaf function, where save/restore is not needed. The register use is not standard, but that shouldn't matter, because the op functions do not take arguments or return a value.

Standard code, parsed by dyngen:
save
do stuff
ret
restore

leaf code:
do stuff
retl
nop

The solution should be to add code to dyngen.c to detect leaf functions which suppresses the save/restore checks.

Thanks for your feedback. I've added additional check to dyngen.c, which checks that function has either save; in the beginning and ret; restore; in the end, or ends in retl; nop;. That allowed me to get past the arm target build failure. Now it fails (during dyngen check) on ppc target, the culprit is the following function:

000033d8 <op_stfs_raw>:
    33d8:       9c 03 bf 90     add  %sp, -112, %sp
    33dc:       d1 19 a0 f8     ldd  [ %g6 + 0xf8 ], %f8
    33e0:       91 a0 18 c8     fdtos  %f8, %f8
    33e4:       d1 23 a0 64     st  %f8, [ %sp + 0x64 ]
    33e8:       c8 03 a0 64     ld  [ %sp + 0x64 ], %g4
    33ec:       99 39 20 18     sra  %g4, 0x18, %o4
    33f0:       97 39 20 10     sra  %g4, 0x10, %o3
    33f4:       95 39 20 08     sra  %g4, 8, %o2
    33f8:       c8 28 60 03     stb  %g4, [ %g1 + 3 ]
    33fc:       d8 28 40 00     stb  %o4, [ %g1 ]
    3400:       d6 28 60 01     stb  %o3, [ %g1 + 1 ]
    3404:       d4 28 60 02     stb  %o2, [ %g1 + 2 ]
    3408:       81 c3 e0 08     retl
    340c:       9c 23 bf 90     sub  %sp, -112, %sp

What should dyngen do about a function like that?

Best regards,

Jurij Smakov                                        [EMAIL PROTECTED]
Key: http://www.wooyd.org/pgpkey/                   KeyID: C99E03CC


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

Reply via email to