Date: Wed, 29 Nov 2000 18:31:12 +1100 (EST) From: Bruce Evans <bde@zeta.org.au> To: Julian Elischer <julian@elischer.org> Cc: current@FreeBSD.ORG Subject: Re: slight improvement in locore.s? Message-ID: <Pine.BSF.4.21.0011291824440.2767-100000@besplex.bde.org> In-Reply-To: <3A1D47C6.D35464F0@elischer.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 23 Nov 2000, Julian Elischer wrote: > locore.s includes: > #define ALLOCPAGES(foo) \ > movl R(physfree), %esi ; \ > movl $((foo)*PAGE_SIZE), %eax ; \ > addl %esi, %eax ; \ > movl %eax, R(physfree) ; \ > movl %esi, %edi ; \ > movl $((foo)*PAGE_SIZE),%ecx ; \ > xorl %eax,%eax ; \ > cld ; \ > rep ; \ > stosb > > > might it be a very slight optimisation to change this to: > #define ALLOCPAGES(foo) \ > movl R(physfree), %esi ; \ > movl $((foo)*PAGE_SIZE), %eax ; \ > movl %eax, %ecx ; \ > addl %esi, %eax ; \ > movl %eax, R(physfree) ; \ > movl %esi, %edi ; \ > xorl %eax,%eax ; \ > cld ; \ > rep ; \ > stosb This can be improved more (3 instructions) by not loading physfree into the wrong register, and depending on stosb to increment the register, but it should be written in C anyway. A relocation macro like R() should work just as well in C as in asm. In C, the above is: bzero(R(physfree), (foo) * PAGE_SIZE); R(physfree) += (foo) * PAGE_SIZE); return (R(physfree)); /* In unusual as well as wrong reg %esi. */ Bruce To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0011291824440.2767-100000>