Subject: x86 assembly again
To: None <port-i386@netbsd.org, port-xen@netbsd.org>
From: Manuel Bouyer <bouyer@antioche.eu.org>
List: port-i386
Date: 03/16/2005 01:47:16
Hi,
again, I'd like some sanity checks on my assembly though.
I think in this piece of code:
IDTVEC(spllower)
#if defined(DDB) || defined(GPROF)
        pushl   %ebp
        movl    %esp,%ebp
        MCOUNT_ASM
#endif /* defined(DDB) || defined(GPROF) */
        pushl   %ebx
        pushl   %esi
        pushl   %edi
        pushl   %ecx
#if defined(DDB) || defined(GPROF)
        movl    8(%ebp),%ebx
#else /* defined(DDB) || defined(GPROF) */
        movl    16(%esp),%ebx
#endif /* defined(DDB) || defined(GPROF) */

the movl 16(%esp),%ebx is broken, it should be 20. However the
DDB | GPROF case is right, as we saved %esp in %ebp before pushing more
registers.
I am right ?

-- 
Manuel Bouyer <bouyer@antioche.eu.org>
     NetBSD: 26 ans d'experience feront toujours la difference
--