Mega compiler intrinsics patch:
FreeLdr
- Goodbye Ke386EraseFlags & KeAmd64EraseFlags. Welcome __writeeflags.
- Respect MSVC when generating clc (clear carry flag) instruction in PcGetTime.
- Use portable __wbinvd instead of __asm__ in XboxMemInit.
- Replace broken gcc assembly by portable intrinsics in WinLdrpMapApic.
- Use portable Ke386SetSs and Ke386SetGs (new) in WinLdrSetProcessorContext.
- The far jump in WinLdrSetProcessorContext can not be expressed in masm, so we use a (untested) far return instead.
Kernel
- Replace Ke386Set/GetInterruptDescriptorTable, Ke386Save/RestoreFlags, Ke386Set/GetDr, Ki386Cpuid, Ke386Rdmsr and Ke386Wrmsr by MSVC alternatives present in intrin.h.
- Fixed Ke386Get/SetGlobalDescriptorTable, Ke386GetLocalDescriptorTable and Ke386GetTr -- the intrinsics were completely broken for MSVC and generated bogus code. Moreover, Ke386Set/GetInterruptDescriptorTable and Ke386Rdmsr were also affected. This lets us (in addition to having a bootable, working msvc compiled kernel) get rid of several hacky variable zero-initializations that hid this bug -- the way MSVC interpreted the inlined assembly resulted in uninitialized variable usage.
- Implement Ke386SetGs and add missing Ke386SetGs for gcc.
- KdPollBreakIn: Use portable KeDisableInterrupts instead of x86 intrinsics and flags.
svn path=/trunk/; revision=43103
17 files changed: