a29cead266
mlelstv@ tracking down the real issue. sp_tlb_flush() makes various assumptions about the ABI and what GCC will do with the rest of this function. the inputs were not referenced by name but only as "%o0" etc inside the asm. the result was that GCC was not filling in the function parameters before calling it because they were not used in the function. so, sp_tlb_flush() was getting random data for it's inputs. oops. for now, convert 2 asm() calls to pure C, and mark the inputs for the sta calls. this makes GCC generate the right code, but it still isn't entirely optimal. ideally a pure C version would exist, but that adds non-trivial overhead (15 instructions vs 23 or so.) one more enhancement to make here would be to assign the %o3, %o4 and %o5 usage into explicit temp variables, instead of assuming that they are going to be free to use. |
||
---|---|---|
bin | ||
common | ||
compat | ||
crypto | ||
dist | ||
distrib | ||
doc | ||
etc | ||
external | ||
extsrc | ||
games | ||
gnu | ||
include | ||
lib | ||
libexec | ||
regress | ||
rescue | ||
sbin | ||
share | ||
sys | ||
tests | ||
tools | ||
usr.bin | ||
usr.sbin | ||
x11 | ||
build.sh | ||
BUILDING | ||
Makefile | ||
Makefile.inc | ||
UPDATING |