On Wed, Oct 14, 1998 at 02:45:45PM +0000, Rik van Riel wrote:
> > Ok, here is a draft version of an agressively optimized version of
> > get_mmu_context(). I just didn't like the idea of referencing
> > global variables in get_mmu_context() if avoidable. The code below
> > will work on both R3000 and R4000 with no performance penalty for
> > being generic. The trick is to patch the operands of two machine
> > instructions at runtime, shoot me.
> ROFL! No offense to the code, I'm sure it works, but
> this just _has_ to be the funniest piece of source
> code to appear on the lists this month...
> Self-modifying code -- this is so much fun :)
Lame example of self modifying code, it doesn't even modify the instructions
and only on bootup.
> > extern inline void r3000_asid_setup(void)
> > extern inline void r4xx0_asid_setup(void)
> Very nice Ralf... My compliments on this piece
> of code -- I can only imagine the amount of
> phantasy and inspiration that was needed to
> create it...
Guess why I had to post it :-) Seriously, I didn't like the proposed
alternative and some of the older machines which have main memory latencies
like 1400ns for shure win each time when _not_ using memory. Even in
case of a l1 hit the amount of time wasted for the load should still be
visible in context switching times. So, no mercy. Patch as patch can.
And maintenance isn't the issue. I messed it up, I maintain it :-)