Change the FS read/write functions to macros and use constant addressing instead of register.
Modified: trunk/reactos/hal/halx86/include/halp.h
Modified: trunk/reactos/hal/halx86/mp/mpsirql.c

Modified: trunk/reactos/hal/halx86/include/halp.h
--- trunk/reactos/hal/halx86/include/halp.h	2005-11-22 00:29:22 UTC (rev 19437)
+++ trunk/reactos/hal/halx86/include/halp.h	2005-11-22 00:34:46 UTC (rev 19438)
@@ -60,22 +60,12 @@
 #define Ki386DisableInterrupts()    __asm__ __volatile__("cli\n\t")
 #define Ki386EnableInterrupts()	    __asm__ __volatile__("sti\n\t")
 #define Ki386HaltProcessor()	    __asm__ __volatile__("hlt\n\t")
-#define Ki386RdTSC(x)		    __asm__ __volatile__("rdtsc\n\t" : "=A" (x.u.LowPart), "=d" (x.u.HighPart));
+#define Ki386RdTSC(x)		    __asm__ __volatile__("rdtsc\n\t" : "=A" (x.u.LowPart), "=d" (x.u.HighPart))
 #define Ki386Rdmsr(msr,val1,val2)   __asm__ __volatile__("rdmsr" : "=a" (val1), "=d" (val2) : "c" (msr))
 #define Ki386Wrmsr(msr,val1,val2)   __asm__ __volatile__("wrmsr" : /* no outputs */ : "c" (msr), "a" (val1), "d" (val2))
+#define Ki386ReadFsByte(offset,x)   __asm__ __volatile__("movb %%fs:%c1,%0" : "=q" (x) : "i" (offset))
+#define Ki386WriteFsByte(offset,x)  __asm__ __volatile__("movb %0,%%fs:%c1" : : "q" ((UCHAR)x), "i" (offset))
 
-static inline BYTE Ki386ReadFsByte(ULONG offset)
-{
-   BYTE b;
-   __asm__ __volatile__("movb %%fs:(%1),%0":"=q" (b):"r" (offset));
-   return b;
-}
-
-static inline VOID Ki386WriteFsByte(ULONG offset, BYTE value)
-{
-   __asm__ __volatile__("movb %0,%%fs:(%1)"::"q" (value), "r" (offset));
-}
-
 #elif defined(_MSC_VER)
 #define Ki386SaveFlags(x)	    __asm pushfd  __asm pop x;
 #define Ki386RestoreFlags(x)	    __asm push x  __asm popfd;

Modified: trunk/reactos/hal/halx86/mp/mpsirql.c
--- trunk/reactos/hal/halx86/mp/mpsirql.c	2005-11-22 00:29:22 UTC (rev 19437)
+++ trunk/reactos/hal/halx86/mp/mpsirql.c	2005-11-22 00:34:46 UTC (rev 19438)
@@ -33,7 +33,7 @@
   Ki386SaveFlags(Flags);
   Ki386DisableInterrupts();
 
-  irql = Ki386ReadFsByte(FIELD_OFFSET(KPCR, Irql));
+  Ki386ReadFsByte(FIELD_OFFSET(KPCR, Irql), irql);
   if (irql > HIGH_LEVEL)
     {
       DPRINT1 ("CurrentIrql %x\n", irql);
@@ -72,6 +72,7 @@
 HalpLowerIrql(KIRQL NewIrql, BOOL FromHalEndSystemInterrupt)
 {
   ULONG Flags;
+  UCHAR DpcRequested;
   if (NewIrql >= DISPATCH_LEVEL)
     {
       KeSetCurrentIrql (NewIrql);
@@ -83,7 +84,8 @@
     {
       KeSetCurrentIrql (DISPATCH_LEVEL);
       APICWrite(APIC_TPR, IRQL2TPR (DISPATCH_LEVEL) & APIC_TPR_PRI);
-      if (FromHalEndSystemInterrupt || Ki386ReadFsByte(FIELD_OFFSET(KIPCR, HalReserved[HAL_DPC_REQUEST])))
+      Ki386ReadFsByte(FIELD_OFFSET(KIPCR, HalReserved[HAL_DPC_REQUEST]), DpcRequested);
+      if (FromHalEndSystemInterrupt || DpcRequested)
         {
           Ki386WriteFsByte(FIELD_OFFSET(KIPCR, HalReserved[HAL_DPC_REQUEST]), 0);
           Ki386EnableInterrupts();