Port-i386 archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: i386 lazy pmap switching in trap.c
> On Sun, Feb 10, 2008 at 02:49:50AM +0900, YAMAMOTO Takashi wrote:
> >
> > > Although I'd also put a 'cmp' and 'jz' after the call earlier, which
> > > is likely to be benefitialon athlons, but not P4 - which will predict
> > > the backwards jump as taken if the branch isn't in the branch cache.
> >
> > do you mean the following?
> >
> > 1: ; \
> > cmpl $0, CPUVAR(WANT_PMAPLOAD) ; \
> > jz 1f ; \
> > call _C_LABEL(pmap_load) ; \
> > cmpl $0, CPUVAR(WANT_PMAPLOAD) ; \
> > jz 1f ; \
> > jmp 1b ; \
> > 1:
>
> That version is bad, both amd and intel processors will mispredict
> the second 'jz'.
> Adding the second 'cmpl' is probably a gain (followed by a 'jnz').
> But the intel processors will predict the backwards conditional
> jump as taken (assuming is isn't in the brach cache).
> (amd processors predict all conditional jumps as 'not taken').
i don't think that version is good either. i was merely trying to
understand what you meant by "put a 'cmp' and 'jz' after the call earlier".
> But if we assume that the pmap is loaded most of the time, what you
> actually need is:
>
> cmpl $0, CPUVAR(WANT_PMAPLOAD)
> jnz 999f
> 998:
> # rest of function
>
> 999:
> call _C_LABEL(pmap_load)
> jmp 988b
>
>
> David
>
> --
> David Laight: david%l8s.co.uk@localhost
i'm confused. weren't you talking about s/_RETRY//?
YAMAMOTO Takashi
Home |
Main Index |
Thread Index |
Old Index