Invoke InitializeFloatingPointUnits() to initialize FPU per UEFI specification
before call C function in assembly code.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jeff Fan <jeff....@intel.com>
CC: Feng Tian <feng.t...@intel.com>
CC: Jiewen Yao <jiewen....@intel.com>
CC: Michael Kinney <michael.d.kin...@intel.com>
---
 UefiCpuPkg/CpuMpPei/CpuMpPei.h        | 1 +
 UefiCpuPkg/CpuMpPei/CpuMpPei.inf      | 1 +
 UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.asm  | 3 +++
 UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.nasm | 3 +++
 UefiCpuPkg/CpuMpPei/X64/MpFuncs.asm   | 6 ++++++
 UefiCpuPkg/CpuMpPei/X64/MpFuncs.nasm  | 5 +++++
 6 files changed, 19 insertions(+)

diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.h b/UefiCpuPkg/CpuMpPei/CpuMpPei.h
index 3f4fa92..146422c 100644
--- a/UefiCpuPkg/CpuMpPei/CpuMpPei.h
+++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.h
@@ -21,6 +21,7 @@
 #include <Library/BaseLib.h>
 #include <Library/HobLib.h>
 #include <Library/PeimEntryPoint.h>
+#include <Library/UefiCpuLib.h>
 
 #pragma pack(1)
 
diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.inf b/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
index 7cf33d3..9fb9e94 100644
--- a/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
+++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
@@ -51,6 +51,7 @@
   BaseLib
   HobLib
   PeimEntryPoint
+  UefiCpuLib
 
 
 
diff --git a/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.asm 
b/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.asm
index c8bdc52..4dc7191 100644
--- a/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.asm
+++ b/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.asm
@@ -22,6 +22,7 @@
 .model  flat
 
 include  MpEqu.inc
+InitializeFloatingPointUnits PROTO C
 
 .code
 
@@ -124,6 +125,8 @@ CProcedureInvoke:
     push       ebp
     mov        ebp, esp
 
+    mov        eax, InitializeFloatingPointUnits
+    call       eax               ; Call assembly function to initialize FPU 
per UEFI spec
 
     push       ebx               ; Push NumApsExecuting
     mov        eax, esi
diff --git a/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.nasm 
b/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.nasm
index 379f13e..4a1aa71 100644
--- a/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.nasm
+++ b/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.nasm
@@ -19,6 +19,7 @@
 
;-------------------------------------------------------------------------------
 
 %include "MpEqu.inc"
+extern ASM_PFX(InitializeFloatingPointUnits)
 
 SECTION .text
 
@@ -114,6 +115,8 @@ CProcedureInvoke:
     push       ebp
     mov        ebp, esp
 
+    mov        eax, ASM_PFX(InitializeFloatingPointUnits)
+    call       eax               ; Call assembly function to initialize FPU 
per UEFI spec
 
     push       ebx               ; Push NumApsExecuting
     mov        eax, esi
diff --git a/UefiCpuPkg/CpuMpPei/X64/MpFuncs.asm 
b/UefiCpuPkg/CpuMpPei/X64/MpFuncs.asm
index 5425547..425bc20 100644
--- a/UefiCpuPkg/CpuMpPei/X64/MpFuncs.asm
+++ b/UefiCpuPkg/CpuMpPei/X64/MpFuncs.asm
@@ -19,6 +19,8 @@
 
;-------------------------------------------------------------------------------
 
 include  MpEqu.inc
+extern   InitializeFloatingPointUnits:PROC
+
 .code
 
;-------------------------------------------------------------------------------------
 ;RendezvousFunnelProc  procedure follows. All APs execute their procedure. This
@@ -158,6 +160,10 @@ CProcedureInvoke:
     push       rbp
     mov        rbp, rsp
 
+    mov        rax, InitializeFloatingPointUnits
+    sub        rsp, 20h
+    call       rax               ; Call assembly function to initialize FPU 
per UEFI spec
+    add        rsp, 20h
 
     mov        edx, ebx          ; edx is NumApsExecuting
     mov        ecx, esi
diff --git a/UefiCpuPkg/CpuMpPei/X64/MpFuncs.nasm 
b/UefiCpuPkg/CpuMpPei/X64/MpFuncs.nasm
index 99669ce..3ddf26c 100644
--- a/UefiCpuPkg/CpuMpPei/X64/MpFuncs.nasm
+++ b/UefiCpuPkg/CpuMpPei/X64/MpFuncs.nasm
@@ -19,6 +19,7 @@
 
;-------------------------------------------------------------------------------
 
 %include "MpEqu.inc"
+extern ASM_PFX(InitializeFloatingPointUnits)
 
 DEFAULT REL
 
@@ -155,6 +156,10 @@ CProcedureInvoke:
     push       rbp
     mov        rbp, rsp
 
+    mov        rax, ASM_PFX(InitializeFloatingPointUnits)
+    sub        rsp, 20h
+    call       rax               ; Call assembly function to initialize FPU 
per UEFI spec
+    add        rsp, 20h
 
     mov        edx, ebx          ; edx is NumApsExecuting
     mov        ecx, esi
-- 
1.9.5.msysgit.0


------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to