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 [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message