Mega compiler intrinsics patch:
authorStefan Ginsberg <stefanginsberg@gmail.com>
Mon, 21 Sep 2009 15:20:18 +0000 (15:20 +0000)
committerStefan Ginsberg <stefanginsberg@gmail.com>
Mon, 21 Sep 2009 15:20:18 +0000 (15:20 +0000)
commit53231784a0afd0d845135c87305d06b5aa4a6a68
tree3320d5c1fcd524b7619f6ea1354c7ecd63b2cd87
parent302ad7c74feed53732d3d4f42048218858d51e78
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:
reactos/boot/freeldr/freeldr/arch/amd64/loader.c
reactos/boot/freeldr/freeldr/arch/i386/loader.c
reactos/boot/freeldr/freeldr/arch/i386/pcrtc.c
reactos/boot/freeldr/freeldr/arch/i386/xboxmem.c
reactos/boot/freeldr/freeldr/include/freeldr.h
reactos/boot/freeldr/freeldr/windows/wlmemory.c
reactos/ntoskrnl/config/i386/cmhardwr.c
reactos/ntoskrnl/include/internal/i386/intrin_i.h
reactos/ntoskrnl/include/internal/ke.h
reactos/ntoskrnl/kd/wrappers/gdbstub.c
reactos/ntoskrnl/kd64/kdlock.c
reactos/ntoskrnl/kdbg/kdb.c
reactos/ntoskrnl/kdbg/kdb_cli.c
reactos/ntoskrnl/ke/freeldr.c
reactos/ntoskrnl/ke/i386/cpu.c
reactos/ntoskrnl/ke/i386/irqobj.c
reactos/ntoskrnl/ke/i386/kiinit.c