Messages in this thread |  | | From | "H. Peter Anvin" <> | Subject | Using %cr2 to reference "current" | Date | 5 Nov 2001 23:18:13 -0800 |
| |
2.4.13-ac8 uses %cr2 rather than (%esp & 0xfffe0000) to get "current". I've been trying to figure out the point of this... writing a control register is microcode on all the x86 implementations I know (and you have to re-set it after every pagefault), and reading one probably is one on most (not Transmeta, but...)
On the other hand, %esp is a GPR and available to the core directly, and so are usually plain immediates.
Is using %cr2 really faster than the old implementation, or is there another reason? It seems that the alignment constraints on the stack still remains, since the %esp solution still remains in places...
It might also be worth considering a segment-register based implementation instead. The reason we're not using %fs and %gs in the kernel anymore is because of the setup slowness, but perhaps using them (use %fs since it's much more likely to be NULL and thus faster to restore) would be faster than using %cr2?
-hpa -- <hpa@transmeta.com> at work, <hpa@zytor.com> in private! "Unix gives you enough rope to shoot yourself in the foot." http://www.zytor.com/~hpa/puzzle.txt <amsp@zytor.com> - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |