-#------------------------------------------------------------------------------
-#*
-#* Copyright (c) 2008, Intel Corporation
-#* All rights reserved. This program and the accompanying materials
-#* are licensed and made available under the terms and conditions of the BSD License
-#* which accompanies this distribution. The full text of the license may be found at
-#* http://opensource.org/licenses/bsd-license.php
-#*
-#* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#*
-#* Module Name:
-#*
-#* Cpu.asm
-#*
-#* Abstract:
-#*
-#------------------------------------------------------------------------------
-#include <EfiBind.h>
-
-.globl ASM_PFX(EfiHalt)
-.globl ASM_PFX(EfiWbinvd)
-.globl ASM_PFX(EfiInvd)
-.globl ASM_PFX(EfiCpuid)
-.globl ASM_PFX(EfiReadTsc)
-.globl ASM_PFX(EfiDisableCache)
-.globl ASM_PFX(EfiEnableCache)
-.globl ASM_PFX(EfiReadMsr)
-.globl ASM_PFX(EfiGetEflags)
-.globl ASM_PFX(EfiDisableInterrupts)
-.globl ASM_PFX(EfiEnableInterrupts)
-.globl ASM_PFX(EfiCpuidExt)
-
-.text
-
-
-#------------------------------------------------------------------------------
-# VOID
-# EfiHalt (
-# VOID
-# )
-#------------------------------------------------------------------------------
-ASM_PFX(EfiHalt):
- hlt
- retq
-
-
-#------------------------------------------------------------------------------
-# VOID
-# EfiWbinvd (
-# VOID
-# )
-#------------------------------------------------------------------------------
-ASM_PFX(EfiWbinvd):
- wbinvd
- retq
-
-
-#------------------------------------------------------------------------------
-# VOID
-# EfiInvd (
-# VOID
-# )
-#------------------------------------------------------------------------------
-ASM_PFX(EfiInvd):
- invd
- retq
-
-#------------------------------------------------------------------------------
-# VOID
-# EfiCpuid (
-# IN UINT32 RegisterInEax, // rcx
-# OUT EFI_CPUID_REGISTER *Reg OPTIONAL // rdx
-# )
-#------------------------------------------------------------------------------
-ASM_PFX(EfiCpuid):
+#------------------------------------------------------------------------------\r
+#*\r
+#* Copyright (c) 2008, Intel Corporation \r
+#* All rights reserved. This program and the accompanying materials \r
+#* are licensed and made available under the terms and conditions of the BSD License \r
+#* which accompanies this distribution. The full text of the license may be found at \r
+#* http://opensource.org/licenses/bsd-license.php \r
+#* \r
+#* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+#* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#* \r
+#* Module Name:\r
+#*\r
+#* Cpu.asm\r
+#* \r
+#* Abstract:\r
+#* \r
+#------------------------------------------------------------------------------\r
+#include <EfiBind.h>\r
+\r
+.globl ASM_PFX(EfiHalt)\r
+.globl ASM_PFX(EfiWbinvd)\r
+.globl ASM_PFX(EfiInvd)\r
+.globl ASM_PFX(EfiCpuid)\r
+.globl ASM_PFX(EfiReadTsc)\r
+.globl ASM_PFX(EfiDisableCache)\r
+.globl ASM_PFX(EfiEnableCache)\r
+.globl ASM_PFX(EfiReadMsr)\r
+.globl ASM_PFX(EfiGetEflags)\r
+.globl ASM_PFX(EfiDisableInterrupts)\r
+.globl ASM_PFX(EfiEnableInterrupts)\r
+.globl ASM_PFX(EfiCpuidExt)\r
+\r
+.text\r
+\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EfiHalt (\r
+# VOID\r
+# )\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(EfiHalt):\r
+ hlt\r
+ retq\r
+\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EfiWbinvd (\r
+# VOID\r
+# )\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(EfiWbinvd):\r
+ wbinvd\r
+ retq\r
+\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EfiInvd (\r
+# VOID\r
+# )\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(EfiInvd):\r
+ invd\r
+ retq\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EfiCpuid (\r
+# IN UINT32 RegisterInEax, // rcx \r
+# OUT EFI_CPUID_REGISTER *Reg OPTIONAL // rdx \r
+# )\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(EfiCpuid):\r
push %rbx\r
mov %rdx,%r8\r
mov %rcx,%rax\r
mov %eax,(%r8)\r
mov %ebx,0x4(%r8)\r
mov %ecx,0x8(%r8)\r
- mov %edx,0xc(%r8)
-_Exit:
- pop %rbx
- retq
-
-#------------------------------------------------------------------------------
-# UINT64
-# EfiReadMsr (
-# IN UINT32 Index, // rcx
-# )
-#------------------------------------------------------------------------------
-ASM_PFX(EfiReadMsr):
+ mov %edx,0xc(%r8)\r
+_Exit: \r
+ pop %rbx\r
+ retq\r
+\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EfiReadMsr (\r
+# IN UINT32 Index, // rcx\r
+# )\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(EfiReadMsr):\r
rdmsr \r
shl $0x20,%rdx\r
or %rdx,%rax\r
retq \r
-
-#------------------------------------------------------------------------------
-# VOID
-# EfiWriteMsr (
-# IN UINT32 Index, // rcx
-# IN UINT64 Value // rdx
-# )
-#------------------------------------------------------------------------------
-ASM_PFX(EfiWriteMsr):
+ \r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EfiWriteMsr (\r
+# IN UINT32 Index, // rcx\r
+# IN UINT64 Value // rdx\r
+# )\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(EfiWriteMsr):\r
mov %rdx,%rax\r
sar $0x20,%rdx\r
wrmsr \r
- retq
-
-#------------------------------------------------------------------------------
-# UINT64
-# EfiReadTsc (
-# VOID
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(EfiReadTsc):
+ retq \r
+\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EfiReadTsc (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(EfiReadTsc):\r
rdtsc \r
shl $0x20,%rax\r
shrd $0x20,%rdx,%rax\r
retq \r
-
-#------------------------------------------------------------------------------
-# VOID
-# EfiDisableCache (
-# VOID
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(EfiDisableCache):
-# added a check to see if cache is already disabled. If it is, then skip.
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EfiDisableCache (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(EfiDisableCache):\r
+# added a check to see if cache is already disabled. If it is, then skip.\r
mov %cr0,%rax\r
and $0x60000000,%rax\r
cmp $0x0,%rax\r
or $0x60000000,%rax\r
mov %rax,%cr0\r
wbinvd \r
-1:
+1:\r
retq \r
-
-#------------------------------------------------------------------------------
-# VOID
-# EfiEnableCache (
-# VOID
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(EfiEnableCache):
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EfiEnableCache (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(EfiEnableCache):\r
invd \r
mov %cr0,%rax\r
and $0xffffffff9fffffff,%rax\r
mov %rax,%cr0\r
retq \r
-
-#------------------------------------------------------------------------------
-# UINTN
-# EfiGetEflags (
-# VOID
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(EfiGetEflags):
+\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EfiGetEflags (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(EfiGetEflags):\r
pushfq \r
pop %rax\r
retq \r
-
-#------------------------------------------------------------------------------
-# VOID
-# EfiDisableInterrupts (
-# VOID
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(EfiDisableInterrupts):
- cli
- ret
-
-#------------------------------------------------------------------------------
-# VOID
-# EfiEnableInterrupts (
-# VOID
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(EfiEnableInterrupts):
- sti
- ret
-#------------------------------------------------------------------------------
-# VOID
-# EfiCpuidExt (
-# IN UINT32 RegisterInEax,
-# IN UINT32 CacheLevel,
-# OUT EFI_CPUID_REGISTER *Regs
-# )
-#------------------------------------------------------------------------------
-ASM_PFX(EfiCpuidExt):
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EfiDisableInterrupts (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(EfiDisableInterrupts):\r
+ cli\r
+ ret\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EfiEnableInterrupts (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(EfiEnableInterrupts):\r
+ sti\r
+ ret\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EfiCpuidExt (\r
+# IN UINT32 RegisterInEax,\r
+# IN UINT32 CacheLevel,\r
+# OUT EFI_CPUID_REGISTER *Regs \r
+# )\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(EfiCpuidExt):\r
push %rbx\r
mov %rcx,%rax\r
mov %rdx,%rcx\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# CpuIdEx.Asm
-#
-# Abstract:
-#
-# AsmCpuidEx function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-
- .686:
- .code:
-
-#------------------------------------------------------------------------------
-# UINT32
-# EFIAPI
-# AsmCpuidEx (
-# IN UINT32 RegisterInEax,
-# IN UINT32 RegisterInEcx,
-# OUT UINT32 *RegisterOutEax OPTIONAL,
-# OUT UINT32 *RegisterOutEbx OPTIONAL,
-# OUT UINT32 *RegisterOutEcx OPTIONAL,
-# OUT UINT32 *RegisterOutEdx OPTIONAL
-# )
-#------------------------------------------------------------------------------
-.globl ASM_PFX(AsmCpuidEx)
-ASM_PFX(AsmCpuidEx):
- push %ebx
- push %ebp
- movl %esp, %ebp
- movl 12(%ebp), %eax
- movl 16(%ebp), %ecx
- cpuid
- push %ecx
- movl 20(%ebp), %ecx
- jecxz L1
- movl %eax, (%ecx)
-L1:
- movl 24(%ebp), %ecx
- jecxz L2
- movl %ebx, (%ecx)
-L2:
- movl 28(%ebp), %ecx
- jecxz L3
- popl (%ecx)
-L3:
- movl 32(%ebp), %edx
- jecxz L4
- movl %edx, (%ecx)
-L4:
- movl 12(%ebp), %eax
- leave
- pop %ebx
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# CpuIdEx.Asm\r
+#\r
+# Abstract:\r
+#\r
+# AsmCpuidEx function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+\r
+ .686:\r
+ .code:\r
+\r
+#------------------------------------------------------------------------------\r
+# UINT32\r
+# EFIAPI\r
+# AsmCpuidEx (\r
+# IN UINT32 RegisterInEax,\r
+# IN UINT32 RegisterInEcx,\r
+# OUT UINT32 *RegisterOutEax OPTIONAL,\r
+# OUT UINT32 *RegisterOutEbx OPTIONAL,\r
+# OUT UINT32 *RegisterOutEcx OPTIONAL,\r
+# OUT UINT32 *RegisterOutEdx OPTIONAL\r
+# )\r
+#------------------------------------------------------------------------------\r
+.globl ASM_PFX(AsmCpuidEx)\r
+ASM_PFX(AsmCpuidEx):\r
+ push %ebx\r
+ push %ebp\r
+ movl %esp, %ebp\r
+ movl 12(%ebp), %eax\r
+ movl 16(%ebp), %ecx\r
+ cpuid\r
+ push %ecx\r
+ movl 20(%ebp), %ecx\r
+ jecxz L1\r
+ movl %eax, (%ecx)\r
+L1:\r
+ movl 24(%ebp), %ecx\r
+ jecxz L2\r
+ movl %ebx, (%ecx)\r
+L2:\r
+ movl 28(%ebp), %ecx\r
+ jecxz L3\r
+ popl (%ecx)\r
+L3:\r
+ movl 32(%ebp), %edx\r
+ jecxz L4\r
+ movl %edx, (%ecx)\r
+L4:\r
+ movl 12(%ebp), %eax\r
+ leave\r
+ pop %ebx\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# DivU64x32.asm
-#
-# Abstract:
-#
-# Calculate the quotient of a 64-bit integer by a 32-bit integer
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-
-.globl ASM_PFX(InternalMathDivU64x32)
-
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# InternalMathDivU64x32 (
-# IN UINT64 Dividend,
-# IN UINT32 Divisor
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(InternalMathDivU64x32):
- movl 8(%esp), %eax
- movl 12(%esp), %ecx
- xorl %edx, %edx
- divl %ecx
- push %eax
- movl 8(%esp), %eax
- divl %ecx
- pop %edx
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# DivU64x32.asm\r
+#\r
+# Abstract:\r
+#\r
+# Calculate the quotient of a 64-bit integer by a 32-bit integer\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+\r
+.globl ASM_PFX(InternalMathDivU64x32)\r
+\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# InternalMathDivU64x32 (\r
+# IN UINT64 Dividend,\r
+# IN UINT32 Divisor\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(InternalMathDivU64x32):\r
+ movl 8(%esp), %eax\r
+ movl 12(%esp), %ecx\r
+ xorl %edx, %edx\r
+ divl %ecx\r
+ push %eax\r
+ movl 8(%esp), %eax\r
+ divl %ecx\r
+ pop %edx\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# LShiftU64.asm
-#
-# Abstract:
-#
-# 64-bit left shift function for IA-32
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-
-.globl ASM_PFX(InternalMathLShiftU64)
-
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# InternalMathLShiftU64 (
-# IN UINT64 Operand,
-# IN UINTN Count
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(InternalMathLShiftU64):
- movb 12(%esp), %cl
- xorl %eax, %eax
- movl 4(%esp), %edx
- testb $32, %cl
- cmovz %edx, %eax
- cmovz 0x8(%esp), %edx
- shld %cl, %eax, %edx
- shl %cl, %eax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# LShiftU64.asm\r
+#\r
+# Abstract:\r
+#\r
+# 64-bit left shift function for IA-32\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+\r
+.globl ASM_PFX(InternalMathLShiftU64)\r
+\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# InternalMathLShiftU64 (\r
+# IN UINT64 Operand,\r
+# IN UINTN Count\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(InternalMathLShiftU64):\r
+ movb 12(%esp), %cl\r
+ xorl %eax, %eax\r
+ movl 4(%esp), %edx\r
+ testb $32, %cl\r
+ cmovz %edx, %eax\r
+ cmovz 0x8(%esp), %edx\r
+ shld %cl, %eax, %edx\r
+ shl %cl, %eax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# LongJump.Asm
-#
-# Abstract:
-#
-# Implementation of _LongJump() on IA-32.
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-
-.globl ASM_PFX(InternalLongJump)
-
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# InternalLongJump (
-# IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer,
-# IN UINTN Value
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(InternalLongJump):
- pop %eax
- pop %edx
- pop %eax
- movl (%edx), %ebx
- movl 4(%edx), %esi
- movl 8(%edx), %edi
- movl 12(%edx), %ebp
- movl 16(%edx), %esp
- jmp *20(%edx)
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# LongJump.Asm\r
+#\r
+# Abstract:\r
+#\r
+# Implementation of _LongJump() on IA-32.\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+\r
+.globl ASM_PFX(InternalLongJump)\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# InternalLongJump (\r
+# IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer,\r
+# IN UINTN Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(InternalLongJump):\r
+ pop %eax\r
+ pop %edx\r
+ pop %eax\r
+ movl (%edx), %ebx\r
+ movl 4(%edx), %esi\r
+ movl 8(%edx), %edi\r
+ movl 12(%edx), %ebp\r
+ movl 16(%edx), %esp\r
+ jmp *20(%edx)\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# MultU64x32.asm
-#
-# Abstract:
-#
-# Calculate the product of a 64-bit integer and a 32-bit integer
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-
- .386:
- .code:
-
-.globl ASM_PFX(InternalMathMultU64x32)
-
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# InternalMathMultU64x32 (
-# IN UINT64 Multiplicand,
-# IN UINT32 Multiplier
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(InternalMathMultU64x32):
- movl 12(%esp), %ecx
- movl %ecx, %eax
- imull 8(%esp), %ecx
- mull 0x4(%esp)
- addl %ecx, %edx
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# MultU64x32.asm\r
+#\r
+# Abstract:\r
+#\r
+# Calculate the product of a 64-bit integer and a 32-bit integer\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+\r
+ .386:\r
+ .code:\r
+\r
+.globl ASM_PFX(InternalMathMultU64x32)\r
+\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# InternalMathMultU64x32 (\r
+# IN UINT64 Multiplicand,\r
+# IN UINT32 Multiplier\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(InternalMathMultU64x32):\r
+ movl 12(%esp), %ecx\r
+ movl %ecx, %eax\r
+ imull 8(%esp), %ecx\r
+ mull 0x4(%esp)\r
+ addl %ecx, %edx\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# RShiftU64.asm
-#
-# Abstract:
-#
-# 64-bit logical right shift function for IA-32
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-
- .686:
- .code:
-
-.globl ASM_PFX(InternalMathRShiftU64)
-
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# InternalMathRShiftU64 (
-# IN UINT64 Operand,
-# IN UINTN Count
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(InternalMathRShiftU64):
- movb 12(%esp), %cl
- xorl %edx, %edx
- movl 8(%esp), %eax
- testb $32, %cl
- cmovz %eax, %edx
- cmovz 0x4(%esp), %eax
- shrdl %cl, %edx, %eax
- shr %cl, %edx
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# RShiftU64.asm\r
+#\r
+# Abstract:\r
+#\r
+# 64-bit logical right shift function for IA-32\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+\r
+ .686:\r
+ .code:\r
+\r
+.globl ASM_PFX(InternalMathRShiftU64)\r
+\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# InternalMathRShiftU64 (\r
+# IN UINT64 Operand,\r
+# IN UINTN Count\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(InternalMathRShiftU64):\r
+ movb 12(%esp), %cl\r
+ xorl %edx, %edx\r
+ movl 8(%esp), %eax\r
+ testb $32, %cl\r
+ cmovz %eax, %edx\r
+ cmovz 0x4(%esp), %eax\r
+ shrdl %cl, %edx, %eax\r
+ shr %cl, %edx\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# CpuId.Asm
-#
-# Abstract:
-#
-# AsmCpuid function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-
-
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# InternalMathSwapBytes64 (
-# IN UINT64 Operand
-# );
-#------------------------------------------------------------------------------
-.globl ASM_PFX(InternalMathSwapBytes64)
-ASM_PFX(InternalMathSwapBytes64):
- movl 8(%esp), %eax
- movl 4(%esp), %edx
- bswapl %eax
- bswapl %edx
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# CpuId.Asm\r
+#\r
+# Abstract:\r
+#\r
+# AsmCpuid function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+\r
+\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# InternalMathSwapBytes64 (\r
+# IN UINT64 Operand\r
+# );\r
+#------------------------------------------------------------------------------\r
+.globl ASM_PFX(InternalMathSwapBytes64)\r
+ASM_PFX(InternalMathSwapBytes64):\r
+ movl 8(%esp), %eax\r
+ movl 4(%esp), %edx\r
+ bswapl %eax\r
+ bswapl %edx\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# CpuBreakpoint.S
-#
-# Abstract:
-#
-# Implementation of CpuBreakpoint() on x86_64
-#
-#------------------------------------------------------------------------------
-#include <EdkIIGlueBase.h>
-
-.global ASM_PFX(CpuBreakpoint)
-ASM_PFX(CpuBreakpoint):
- int $0x3
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# CpuBreakpoint.S\r
+#\r
+# Abstract:\r
+#\r
+# Implementation of CpuBreakpoint() on x86_64\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EdkIIGlueBase.h>\r
+\r
+.global ASM_PFX(CpuBreakpoint)\r
+ASM_PFX(CpuBreakpoint):\r
+ int $0x3\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# CpuId.S
-#
-# Abstract:
-#
-# AsmCpuid function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# AsmCpuid (
-# IN UINT32 RegisterInEax,
-# OUT UINT32 *RegisterOutEax OPTIONAL,
-# OUT UINT32 *RegisterOutEbx OPTIONAL,
-# OUT UINT32 *RegisterOutEcx OPTIONAL,
-# OUT UINT32 *RegisterOutEdx OPTIONAL
-# )
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmCpuid)
-ASM_PFX(AsmCpuid):
- push %rbx
- mov %ecx, %eax
- push %rax # save Index on stack
- push %rdx
- cpuid
- test %r9, %r9
- jz L1
- mov %ecx, (%r9)
-L1:
- pop %rcx
- jrcxz L2
- mov %eax, (%rcx)
-L2:
- mov %r8, %rcx
- jrcxz L3
- mov %ebx, (%rcx)
-L3:
- mov 0x38(%rsp), %rcx
- jrcxz L4
- mov %edx, (%rcx)
-L4:
- pop %rax # restore Index to rax as return value
- pop %rbx
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# CpuId.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmCpuid function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# AsmCpuid (\r
+# IN UINT32 RegisterInEax,\r
+# OUT UINT32 *RegisterOutEax OPTIONAL,\r
+# OUT UINT32 *RegisterOutEbx OPTIONAL,\r
+# OUT UINT32 *RegisterOutEcx OPTIONAL,\r
+# OUT UINT32 *RegisterOutEdx OPTIONAL\r
+# )\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmCpuid)\r
+ASM_PFX(AsmCpuid):\r
+ push %rbx\r
+ mov %ecx, %eax\r
+ push %rax # save Index on stack\r
+ push %rdx\r
+ cpuid\r
+ test %r9, %r9\r
+ jz L1\r
+ mov %ecx, (%r9)\r
+L1:\r
+ pop %rcx\r
+ jrcxz L2\r
+ mov %eax, (%rcx)\r
+L2:\r
+ mov %r8, %rcx\r
+ jrcxz L3\r
+ mov %ebx, (%rcx)\r
+L3:\r
+ mov 0x38(%rsp), %rcx\r
+ jrcxz L4\r
+ mov %edx, (%rcx)\r
+L4:\r
+ pop %rax # restore Index to rax as return value\r
+ pop %rbx\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# CpuIdEx.Asm
-#
-# Abstract:
-#
-# AsmCpuidEx function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-#include <EdkIIGlueBase.h>
-
-#------------------------------------------------------------------------------
-# UINT32
-# EFIAPI
-# AsmCpuidEx (
-# IN UINT32 RegisterInEax,
-# IN UINT32 RegisterInEcx,
-# OUT UINT32 *RegisterOutEax OPTIONAL,
-# OUT UINT32 *RegisterOutEbx OPTIONAL,
-# OUT UINT32 *RegisterOutEcx OPTIONAL,
-# OUT UINT32 *RegisterOutEdx OPTIONAL
-# )
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmCpuidEx)
-ASM_PFX(AsmCpuidEx):
- push %rbx
- movl %ecx,%eax
- movl %edx,%ecx
- push %rax
- cpuid
- mov 0x38(%rsp), %r10
- test %r10, %r10
- jz L1
- mov %ecx,(%r10)
-L1:
- mov %r8, %rcx
- jrcxz L2
- movl %eax,(%rcx)
-L2:
- mov %r9, %rcx
- jrcxz L3
- mov %ebx, (%rcx)
-L3:
- mov 0x40(%rsp), %rcx
- jrcxz L4
- mov %edx, (%rcx)
-L4:
- pop %rax
- pop %rbx
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# CpuIdEx.Asm\r
+#\r
+# Abstract:\r
+#\r
+# AsmCpuidEx function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EdkIIGlueBase.h>\r
+\r
+#------------------------------------------------------------------------------\r
+# UINT32\r
+# EFIAPI\r
+# AsmCpuidEx (\r
+# IN UINT32 RegisterInEax,\r
+# IN UINT32 RegisterInEcx,\r
+# OUT UINT32 *RegisterOutEax OPTIONAL,\r
+# OUT UINT32 *RegisterOutEbx OPTIONAL,\r
+# OUT UINT32 *RegisterOutEcx OPTIONAL,\r
+# OUT UINT32 *RegisterOutEdx OPTIONAL\r
+# )\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmCpuidEx)\r
+ASM_PFX(AsmCpuidEx):\r
+ push %rbx\r
+ movl %ecx,%eax\r
+ movl %edx,%ecx\r
+ push %rax\r
+ cpuid\r
+ mov 0x38(%rsp), %r10\r
+ test %r10, %r10\r
+ jz L1\r
+ mov %ecx,(%r10)\r
+L1: \r
+ mov %r8, %rcx\r
+ jrcxz L2\r
+ movl %eax,(%rcx)\r
+L2: \r
+ mov %r9, %rcx\r
+ jrcxz L3\r
+ mov %ebx, (%rcx)\r
+L3: \r
+ mov 0x40(%rsp), %rcx\r
+ jrcxz L4\r
+ mov %edx, (%rcx)\r
+L4: \r
+ pop %rax\r
+ pop %rbx\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# DisablePaging64.S
-#
-# Abstract:
-#
-# AsmDisablePaging64 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# InternalX86DisablePaging64 (
-# IN UINT16 Cs, %rdi
-# IN UINT64 EntryPoint, %rsi
-# IN UINT64 Context1, OPTIONAL %rdx
-# IN UINT32 Context2, OPTIONAL %rcx
-# IN UINT64 NewStack %r8
-# );
-#------------------------------------------------------------------------------
-
-.global ASM_PFX(InternalX86DisablePaging64)
-ASM_PFX(InternalX86DisablePaging64):
- cli
- shl $0x20,%rcx
- lea (%rip), %eax
- mov %eax,%ecx
- push %rcx
- mov %edx,%ebx
- mov %r8d,%esi
- mov %r9d,%edi
- mov 0x28(%rsp),%eax
- lret
-L1:
- mov %eax,%esp
- mov %cr0,%rax
- btr $0x1f,%eax
- mov %rax,%cr0
- mov $0xc0000080,%ecx
- rdmsr
- and $0xfe,%ah
- wrmsr
- mov %cr4,%rax
- and $0xdf,%al
- mov %rax,%cr4
- push %rdi
- push %rsi
- callq *%rbx
- jmp .
-
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# DisablePaging64.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmDisablePaging64 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+ \r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# InternalX86DisablePaging64 (\r
+# IN UINT16 Cs, %rdi\r
+# IN UINT64 EntryPoint, %rsi\r
+# IN UINT64 Context1, OPTIONAL %rdx\r
+# IN UINT32 Context2, OPTIONAL %rcx\r
+# IN UINT64 NewStack %r8\r
+# );\r
+#------------------------------------------------------------------------------\r
+\r
+.global ASM_PFX(InternalX86DisablePaging64)\r
+ASM_PFX(InternalX86DisablePaging64):\r
+ cli \r
+ shl $0x20,%rcx\r
+ lea (%rip), %eax\r
+ mov %eax,%ecx\r
+ push %rcx\r
+ mov %edx,%ebx\r
+ mov %r8d,%esi\r
+ mov %r9d,%edi\r
+ mov 0x28(%rsp),%eax\r
+ lret \r
+L1:\r
+ mov %eax,%esp\r
+ mov %cr0,%rax\r
+ btr $0x1f,%eax\r
+ mov %rax,%cr0\r
+ mov $0xc0000080,%ecx\r
+ rdmsr \r
+ and $0xfe,%ah\r
+ wrmsr \r
+ mov %cr4,%rax\r
+ and $0xdf,%al\r
+ mov %rax,%cr4\r
+ push %rdi\r
+ push %rsi\r
+ callq *%rbx\r
+ jmp .\r
+\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# EnableDisableInterrupts.S
-#
-# Abstract:
-#
-# EnableDisableInterrupts function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# EnableDisableInterrupts (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(EnableDisableInterrupts)
-.align 16
-ASM_PFX(EnableDisableInterrupts):
- sti
- cli
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# EnableDisableInterrupts.S\r
+#\r
+# Abstract:\r
+#\r
+# EnableDisableInterrupts function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# EnableDisableInterrupts (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(EnableDisableInterrupts)\r
+.align 16\r
+ASM_PFX(EnableDisableInterrupts):\r
+ sti\r
+ cli\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# EnableInterrupts.S
-#
-# Abstract:
-#
-# EnableInterrupts function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# EnableInterrupts (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(EnableInterrupts)
-ASM_PFX(EnableInterrupts):
- sti
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# EnableInterrupts.S\r
+#\r
+# Abstract:\r
+#\r
+# EnableInterrupts function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# EnableInterrupts (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(EnableInterrupts)\r
+ASM_PFX(EnableInterrupts):\r
+ sti\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# EnablePaging64.S
-#
-# Abstract:
-#
-# AsmEnablePaging64 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# InternalX86EnablePaging64 (
-# IN UINT16 Cs, %rdi
-# IN UINT64 EntryPoint, %rsi
-# IN UINT64 Context1, OPTIONAL %rdx
-# IN UINT64 Context2, OPTIONAL %rcx
-# IN UINT64 NewStack %r8
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(InternalX86EnablePaging64)
-ASM_PFX(InternalX86EnablePaging64):
- cli
- pop %rax
- callq Base
-Base:
- addl $(L1-Base),(%rsp)
- mov %cr4,%rax
- or $0x20,%al
- mov %rax,%cr4
- mov $0xc0000080,%ecx
- rdmsr
- or $0x1,%ah
- wrmsr
- mov %cr0,%rax
- bts $0x1f,%eax
- mov %rax,%cr0
- lret
-L1:
- addr32 mov (%esp),%rbx
- addr32 mov 0x8(%esp),%rcx
- addr32 mov 0x10(%esp),%rdx
- addr32 mov 0x18(%esp),%rsp
- add $-0x20,%rsp
- callq *%rbx
- jmp .
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# EnablePaging64.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmEnablePaging64 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# InternalX86EnablePaging64 (\r
+# IN UINT16 Cs, %rdi\r
+# IN UINT64 EntryPoint, %rsi\r
+# IN UINT64 Context1, OPTIONAL %rdx\r
+# IN UINT64 Context2, OPTIONAL %rcx\r
+# IN UINT64 NewStack %r8\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(InternalX86EnablePaging64)\r
+ASM_PFX(InternalX86EnablePaging64):\r
+ cli \r
+ pop %rax\r
+ callq Base\r
+Base:\r
+ addl $(L1-Base),(%rsp)\r
+ mov %cr4,%rax\r
+ or $0x20,%al\r
+ mov %rax,%cr4\r
+ mov $0xc0000080,%ecx\r
+ rdmsr \r
+ or $0x1,%ah\r
+ wrmsr \r
+ mov %cr0,%rax\r
+ bts $0x1f,%eax\r
+ mov %rax,%cr0\r
+ lret \r
+L1:\r
+ addr32 mov (%esp),%rbx\r
+ addr32 mov 0x8(%esp),%rcx\r
+ addr32 mov 0x10(%esp),%rdx\r
+ addr32 mov 0x18(%esp),%rsp\r
+ add $-0x20,%rsp\r
+ callq *%rbx\r
+ jmp .\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# FlushCacheLine.S
-#
-# Abstract:
-#
-# AsmFlushCacheLine function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID *
-# EFIAPI
-# AsmFlushCacheLine (
-# IN VOID *LinearAddress
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmFlushCacheLine)
-ASM_PFX(AsmFlushCacheLine):
- clflush (%rdi)
- mov %rdi, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# FlushCacheLine.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmFlushCacheLine function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID *\r
+# EFIAPI \r
+# AsmFlushCacheLine (\r
+# IN VOID *LinearAddress\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmFlushCacheLine)\r
+ASM_PFX(AsmFlushCacheLine):\r
+ clflush (%rdi)\r
+ mov %rdi, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# FxRestore.S
-#
-# Abstract:
-#
-# AsmFxRestore function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# InternalX86FxRestore (
-# IN CONST IA32_FX_BUFFER *Buffer
-# )#
-#------------------------------------------------------------------------------
-.global ASM_PFX(InternalX86FxRestore)
-ASM_PFX(InternalX86FxRestore):
- fxrstor (%rcx)
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# FxRestore.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmFxRestore function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# InternalX86FxRestore (\r
+# IN CONST IA32_FX_BUFFER *Buffer\r
+# )#\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(InternalX86FxRestore)\r
+ASM_PFX(InternalX86FxRestore):\r
+ fxrstor (%rcx)\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# FxSave.S
-#
-# Abstract:
-#
-# AsmFxSave function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# InternalX86FxSave (
-# OUT IA32_FX_BUFFER *Buffer
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(InternalX86FxSave)
-ASM_PFX(InternalX86FxSave):
- fxsave (%rcx)
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# FxSave.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmFxSave function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# InternalX86FxSave (\r
+# OUT IA32_FX_BUFFER *Buffer\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(InternalX86FxSave)\r
+ASM_PFX(InternalX86FxSave):\r
+ fxsave (%rcx)\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# InterlockedCompareExchange64.S
-#
-# Abstract:
-#
-# InterlockedCompareExchange64 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# InterlockedCompareExchange64 (
-# IN UINT64 *Value,
-# IN UINT64 CompareValue,
-# IN UINT64 ExchangeValue
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(InternalSyncCompareExchange64)
-.align 16
-ASM_PFX(InternalSyncCompareExchange64):
- mov %rsi, %rax
- lock cmpxchg %rdx,(%rdi)
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# InterlockedCompareExchange64.S\r
+#\r
+# Abstract:\r
+#\r
+# InterlockedCompareExchange64 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# InterlockedCompareExchange64 (\r
+# IN UINT64 *Value,\r
+# IN UINT64 CompareValue,\r
+# IN UINT64 ExchangeValue\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(InternalSyncCompareExchange64)\r
+.align 16\r
+ASM_PFX(InternalSyncCompareExchange64):\r
+ mov %rsi, %rax\r
+ lock cmpxchg %rdx,(%rdi)\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# InterlockedDecrement.S
-#
-# Abstract:
-#
-# InterlockedDecrement function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT32
-# EFIAPI
-# InterlockedDecrement (
-# IN UINT32 *Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(InternalSyncDecrement)
-ASM_PFX(InternalSyncDecrement):
- lock decl (%rcx)
- mov (%rcx), %eax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# InterlockedDecrement.S\r
+#\r
+# Abstract:\r
+#\r
+# InterlockedDecrement function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT32\r
+# EFIAPI\r
+# InterlockedDecrement (\r
+# IN UINT32 *Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(InternalSyncDecrement)\r
+ASM_PFX(InternalSyncDecrement):\r
+ lock decl (%rcx)\r
+ mov (%rcx), %eax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# InterlockedIncrement.S
-#
-# Abstract:
-#
-# InterlockedIncrement function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT32
-# EFIAPI
-# InterlockedIncrement (
-# IN UINT32 *Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(InternalSyncIncrement)
-ASM_PFX(InternalSyncIncrement):
- lock incl (%rcx)
- mov (%rcx), %eax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# InterlockedIncrement.S\r
+#\r
+# Abstract:\r
+#\r
+# InterlockedIncrement function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT32\r
+# EFIAPI\r
+# InterlockedIncrement (\r
+# IN UINT32 *Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(InternalSyncIncrement)\r
+ASM_PFX(InternalSyncIncrement):\r
+ lock incl (%rcx)\r
+ mov (%rcx), %eax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# Invd.S
-#
-# Abstract:
-#
-# AsmInvd function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# AsmInvd (
-# VOID
-# )#
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmInvd)
-ASM_PFX(AsmInvd):
- invd
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# Invd.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmInvd function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# AsmInvd (\r
+# VOID\r
+# )#\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmInvd)\r
+ASM_PFX(AsmInvd):\r
+ invd\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# Monitor.S
-#
-# Abstract:
-#
-# AsmMonitor function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# AsmMonitor (
-# IN UINTN Eax,
-# IN UINTN Ecx,
-# IN UINTN Edx
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmMonitor)
-.align 16
-ASM_PFX(AsmMonitor):
- mov %ecx,%eax
- mov %edx,%ecx
- mov %r8d,%edx
- monitor
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# Monitor.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmMonitor function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# AsmMonitor (\r
+# IN UINTN Eax,\r
+# IN UINTN Ecx,\r
+# IN UINTN Edx\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmMonitor)\r
+.align 16\r
+ASM_PFX(AsmMonitor):\r
+ mov %ecx,%eax\r
+ mov %edx,%ecx\r
+ mov %r8d,%edx\r
+ monitor\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# Mwait.S
-#
-# Abstract:
-#
-# AsmMwait function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# AsmMwait (
-# IN UINTN Eax,
-# IN UINTN Ecx
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmMwait)
-.align 16
-ASM_PFX(AsmMwait):
- mov %ecx,%eax
- mov %edx,%ecx
- mwait %rax,%rcx
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# Mwait.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmMwait function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# AsmMwait (\r
+# IN UINTN Eax,\r
+# IN UINTN Ecx\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmMwait)\r
+.align 16\r
+ASM_PFX(AsmMwait):\r
+ mov %ecx,%eax\r
+ mov %edx,%ecx\r
+ mwait %rax,%rcx\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadCr0.S
-#
-# Abstract:
-#
-# AsmReadCr0 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmReadCr0 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadCr0)
-.align 16
-ASM_PFX(AsmReadCr0):
- mov %cr0, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadCr0.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadCr0 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmReadCr0 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadCr0)\r
+.align 16\r
+ASM_PFX(AsmReadCr0):\r
+ mov %cr0, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadCr2.S
-#
-# Abstract:
-#
-# AsmReadCr2 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmReadCr2 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadCr2)
-.align 16
-ASM_PFX(AsmReadCr2):
- mov %cr2, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadCr2.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadCr2 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmReadCr2 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadCr2)\r
+.align 16\r
+ASM_PFX(AsmReadCr2):\r
+ mov %cr2, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadCr3.S
-#
-# Abstract:
-#
-# AsmReadCr3 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmReadCr3 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadCr3)
-.align 16
-ASM_PFX(AsmReadCr3):
- mov %cr3, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadCr3.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadCr3 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmReadCr3 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadCr3)\r
+.align 16\r
+ASM_PFX(AsmReadCr3):\r
+ mov %cr3, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadCr4.S
-#
-# Abstract:
-#
-# AsmReadCr4 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmReadCr4 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadCr4)
-.align 16
-ASM_PFX(AsmReadCr4):
- mov %cr4, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadCr4.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadCr4 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmReadCr4 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadCr4)\r
+.align 16\r
+ASM_PFX(AsmReadCr4):\r
+ mov %cr4, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadCs.S
-#
-# Abstract:
-#
-# AsmReadCs function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT16
-# EFIAPI
-# AsmReadCs (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadCs)
-.align 16
-ASM_PFX(AsmReadCs):
- mov %cs, %eax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadCs.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadCs function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT16\r
+# EFIAPI\r
+# AsmReadCs (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadCs)\r
+.align 16\r
+ASM_PFX(AsmReadCs):\r
+ mov %cs, %eax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadDr0.S
-#
-# Abstract:
-#
-# AsmReadDr0 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmReadDr0 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadDr0)
-.align 16
-ASM_PFX(AsmReadDr0):
- mov %dr0, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadDr0.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadDr0 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmReadDr0 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadDr0)\r
+.align 16\r
+ASM_PFX(AsmReadDr0):\r
+ mov %dr0, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadDr1.S
-#
-# Abstract:
-#
-# AsmReadDr1 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmReadDr1 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadDr1)
-.align 16
-ASM_PFX(AsmReadDr1):
- mov %dr1, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadDr1.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadDr1 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmReadDr1 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadDr1)\r
+.align 16\r
+ASM_PFX(AsmReadDr1):\r
+ mov %dr1, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadDr2.S
-#
-# Abstract:
-#
-# AsmReadDr2 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmReadDr2 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadDr2)
-.align 16
-ASM_PFX(AsmReadDr2):
- mov %dr2, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadDr2.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadDr2 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmReadDr2 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadDr2)\r
+.align 16\r
+ASM_PFX(AsmReadDr2):\r
+ mov %dr2, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadDr3.S
-#
-# Abstract:
-#
-# AsmReadDr3 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmReadDr3 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadDr3)
-.align 16
-ASM_PFX(AsmReadDr3):
- mov %dr3, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadDr3.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadDr3 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmReadDr3 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadDr3)\r
+.align 16\r
+ASM_PFX(AsmReadDr3):\r
+ mov %dr3, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadDr4.S
-#
-# Abstract:
-#
-# AsmReadDr4 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmReadDr4 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadDr4)
-.align 16
-ASM_PFX(AsmReadDr4):
- #DB 0fh, 21h, 0e0h
- mov %dr4, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadDr4.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadDr4 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmReadDr4 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadDr4)\r
+.align 16\r
+ASM_PFX(AsmReadDr4):\r
+ #DB 0fh, 21h, 0e0h\r
+ mov %dr4, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadDr5.S
-#
-# Abstract:
-#
-# AsmReadDr5 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmReadDr5 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadDr5)
-.align 16
-ASM_PFX(AsmReadDr5):
- mov %dr5, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadDr5.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadDr5 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmReadDr5 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadDr5)\r
+.align 16\r
+ASM_PFX(AsmReadDr5):\r
+ mov %dr5, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadDr6.S
-#
-# Abstract:
-#
-# AsmReadDr6 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmReadDr6 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadDr6)
-.align 16
-ASM_PFX(AsmReadDr6):
- mov %dr6, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadDr6.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadDr6 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmReadDr6 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadDr6)\r
+.align 16\r
+ASM_PFX(AsmReadDr6):\r
+ mov %dr6, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadDr7.S
-#
-# Abstract:
-#
-# AsmReadDr7 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmReadDr7 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadDr7)
-.align 16
-ASM_PFX(AsmReadDr7):
- mov %dr7, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadDr7.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadDr7 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmReadDr7 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadDr7)\r
+.align 16\r
+ASM_PFX(AsmReadDr7):\r
+ mov %dr7, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadDs.S
-#
-# Abstract:
-#
-# AsmReadDs function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT16
-# EFIAPI
-# AsmReadDs (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadDs)
-.align 16
-ASM_PFX(AsmReadDs):
- movl %ds, %eax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadDs.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadDs function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT16\r
+# EFIAPI\r
+# AsmReadDs (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadDs)\r
+.align 16\r
+ASM_PFX(AsmReadDs):\r
+ movl %ds, %eax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadEflags.S
-#
-# Abstract:
-#
-# AsmReadEflags function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmReadEflags (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadEflags)
-.align 16
-ASM_PFX(AsmReadEflags):
- pushfq
- pop %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadEflags.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadEflags function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmReadEflags (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadEflags)\r
+.align 16\r
+ASM_PFX(AsmReadEflags):\r
+ pushfq\r
+ pop %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadEs.S
-#
-# Abstract:
-#
-# AsmReadEs function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT16
-# EFIAPI
-# AsmReadEs (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadEs)
-.align 16
-ASM_PFX(AsmReadEs):
- mov %es, %eax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadEs.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadEs function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT16\r
+# EFIAPI\r
+# AsmReadEs (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadEs)\r
+.align 16\r
+ASM_PFX(AsmReadEs):\r
+ mov %es, %eax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadFs.S
-#
-# Abstract:
-#
-# AsmReadFs function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT16
-# EFIAPI
-# AsmReadFs (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadFs)
-.align 16
-ASM_PFX(AsmReadFs):
- mov %fs, %eax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadFs.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadFs function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT16\r
+# EFIAPI\r
+# AsmReadFs (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadFs)\r
+.align 16\r
+ASM_PFX(AsmReadFs):\r
+ mov %fs, %eax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadGdtr.S
-#
-# Abstract:
-#
-# AsmReadGdtr function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# InternalX86ReadGdtr (
-# OUT IA32_DESCRIPTOR *Gdtr
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(InternalX86ReadGdtr)
-.align 16
-ASM_PFX(InternalX86ReadGdtr):
- sgdt (%rcx)
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadGdtr.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadGdtr function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# InternalX86ReadGdtr (\r
+# OUT IA32_DESCRIPTOR *Gdtr\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(InternalX86ReadGdtr)\r
+.align 16\r
+ASM_PFX(InternalX86ReadGdtr):\r
+ sgdt (%rcx)\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadGs.S
-#
-# Abstract:
-#
-# AsmReadGs function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT16
-# EFIAPI
-# AsmReadGs (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadGs)
-.align 16
-ASM_PFX(AsmReadGs):
- mov %gs, %eax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadGs.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadGs function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT16\r
+# EFIAPI\r
+# AsmReadGs (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadGs)\r
+.align 16\r
+ASM_PFX(AsmReadGs):\r
+ mov %gs, %eax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadIdtr.AS
-#
-# Abstract:
-#
-# AsmReadIdtr function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# InternalX86ReadIdtr (
-# OUT IA32_DESCRIPTOR *Idtr
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(InternalX86ReadIdtr)
-.align 16
-ASM_PFX(InternalX86ReadIdtr):
- sidt (%rcx)
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadIdtr.AS\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadIdtr function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# InternalX86ReadIdtr (\r
+# OUT IA32_DESCRIPTOR *Idtr\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(InternalX86ReadIdtr)\r
+.align 16\r
+ASM_PFX(InternalX86ReadIdtr):\r
+ sidt (%rcx)\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadLdtr.AS
-#
-# Abstract:
-#
-# AsmReadLdtr function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT16
-# EFIAPI
-# AsmReadLdtr (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadLdtr)
-.align 16
-ASM_PFX(AsmReadLdtr):
- sldt %eax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadLdtr.AS\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadLdtr function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT16\r
+# EFIAPI\r
+# AsmReadLdtr (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadLdtr)\r
+.align 16\r
+ASM_PFX(AsmReadLdtr):\r
+ sldt %eax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadMm0.S
-#
-# Abstract:
-#
-# AsmReadMm0 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# AsmReadMm0 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadMm0)
-.align 16
-ASM_PFX(AsmReadMm0):
- #DB 48h, 0fh, 7eh, 0c0h
- movd %mm0, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadMm0.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadMm0 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# AsmReadMm0 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadMm0)\r
+.align 16\r
+ASM_PFX(AsmReadMm0):\r
+ #DB 48h, 0fh, 7eh, 0c0h\r
+ movd %mm0, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadMm1.S
-#
-# Abstract:
-#
-# AsmReadMm1 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# AsmReadMm1 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadMm1)
-.align 16
-ASM_PFX(AsmReadMm1):
- #DB 48h, 0fh, 7eh, 0c8h
- movd %mm1, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadMm1.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadMm1 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# AsmReadMm1 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadMm1)\r
+.align 16\r
+ASM_PFX(AsmReadMm1):\r
+ #DB 48h, 0fh, 7eh, 0c8h\r
+ movd %mm1, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadMm2.S
-#
-# Abstract:
-#
-# AsmReadMm2 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# AsmReadMm2 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadMm2)
-.align 16
-ASM_PFX(AsmReadMm2):
- #DB 48h, 0fh, 7eh, 0d0h
- movd %mm2, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadMm2.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadMm2 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# AsmReadMm2 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadMm2)\r
+.align 16\r
+ASM_PFX(AsmReadMm2):\r
+ #DB 48h, 0fh, 7eh, 0d0h\r
+ movd %mm2, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadMm3.S
-#
-# Abstract:
-#
-# AsmReadMm3 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# AsmReadMm3 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadMm3)
-.align 16
-ASM_PFX(AsmReadMm3):
- #DB 48h, 0fh, 7eh, 0d8h
- movd %mm3, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadMm3.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadMm3 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# AsmReadMm3 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadMm3)\r
+.align 16\r
+ASM_PFX(AsmReadMm3):\r
+ #DB 48h, 0fh, 7eh, 0d8h\r
+ movd %mm3, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadMm4.AS
-#
-# Abstract:
-#
-# AsmReadMm4 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# AsmReadMm4 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadMm4)
-.align 16
-ASM_PFX(AsmReadMm4):
- #DB 48h, 0fh, 7eh, 0e0h
- movd %mm4, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadMm4.AS\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadMm4 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# AsmReadMm4 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadMm4)\r
+.align 16\r
+ASM_PFX(AsmReadMm4):\r
+ #DB 48h, 0fh, 7eh, 0e0h\r
+ movd %mm4, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadMm5.S
-#
-# Abstract:
-#
-# AsmReadMm5 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# AsmReadMm5 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadMm5)
-.align 16
-ASM_PFX(AsmReadMm5):
- #DB 48h, 0fh, 7eh, 0e8h
- movd %mm5, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadMm5.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadMm5 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# AsmReadMm5 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadMm5)\r
+.align 16\r
+ASM_PFX(AsmReadMm5):\r
+ #DB 48h, 0fh, 7eh, 0e8h\r
+ movd %mm5, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadMm6.S
-#
-# Abstract:
-#
-# AsmReadMm6 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# AsmReadMm6 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadMm6)
-.align 16
-ASM_PFX(AsmReadMm6):
- #DB 48h, 0fh, 7eh, 0f0h
- movd %mm6, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadMm6.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadMm6 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# AsmReadMm6 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadMm6)\r
+.align 16\r
+ASM_PFX(AsmReadMm6):\r
+ #DB 48h, 0fh, 7eh, 0f0h\r
+ movd %mm6, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadMm7.S
-#
-# Abstract:
-#
-# AsmReadMm7 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# AsmReadMm7 (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadMm7)
-.align 16
-ASM_PFX(AsmReadMm7):
- #DB 48h, 0fh, 7eh, 0f8h
- movd %mm7, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadMm7.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadMm7 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# AsmReadMm7 (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadMm7)\r
+.align 16\r
+ASM_PFX(AsmReadMm7):\r
+ #DB 48h, 0fh, 7eh, 0f8h\r
+ movd %mm7, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadMsr64.S
-#
-# Abstract:
-#
-# AsmReadMsr64 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# AsmReadMsr64 (
-# IN UINT32 Index
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadMsr64)
-.align 16
-ASM_PFX(AsmReadMsr64):
- rdmsr # edx & eax are zero extended
- shl $0x20, %rdx
- or %rdx, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadMsr64.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadMsr64 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# AsmReadMsr64 (\r
+# IN UINT32 Index\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadMsr64)\r
+.align 16\r
+ASM_PFX(AsmReadMsr64):\r
+ rdmsr # edx & eax are zero extended\r
+ shl $0x20, %rdx\r
+ or %rdx, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadPmc.S
-#
-# Abstract:
-#
-# AsmReadPmc function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# AsmReadPmc (
-# IN UINT32 PmcIndex
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadPmc)
-.align 16
-ASM_PFX(AsmReadPmc):
- rdpmc
- shl $0x20, %rdx
- or %rdx, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadPmc.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadPmc function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# AsmReadPmc (\r
+# IN UINT32 PmcIndex\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadPmc)\r
+.align 16\r
+ASM_PFX(AsmReadPmc):\r
+ rdpmc\r
+ shl $0x20, %rdx\r
+ or %rdx, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadSs.S
-#
-# Abstract:
-#
-# AsmReadSs function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT16
-# EFIAPI
-# AsmReadSs (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadSs);
-.align 16
-ASM_PFX(AsmReadSs):
- movl %ss, %eax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadSs.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadSs function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT16\r
+# EFIAPI\r
+# AsmReadSs (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadSs);\r
+.align 16\r
+ASM_PFX(AsmReadSs):\r
+ movl %ss, %eax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadTr.S
-#
-# Abstract:
-#
-# AsmReadTr function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT16
-# EFIAPI
-# AsmReadTr (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadTr)
-.align 16
-ASM_PFX(AsmReadTr):
- str %eax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadTr.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadTr function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT16\r
+# EFIAPI\r
+# AsmReadTr (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadTr)\r
+.align 16\r
+ASM_PFX(AsmReadTr): \r
+ str %eax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadTsc.S
-#
-# Abstract:
-#
-# AsmReadTsc function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# AsmReadTsc (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmReadTsc)
-.align 16
-ASM_PFX(AsmReadTsc):
- rdtsc
- shl $0x20, %rdx
- or %rdx, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadTsc.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmReadTsc function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# AsmReadTsc (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmReadTsc)\r
+.align 16\r
+ASM_PFX(AsmReadTsc):\r
+ rdtsc\r
+ shl $0x20, %rdx\r
+ or %rdx, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# SetJump.S
-#
-# Abstract:
-#
-# Implementation of SetJump() on x86_64
-#
-#------------------------------------------------------------------------------
-#include <EdkIIGlueBase.h>
-.extern InternalAssertJumpBuffer;
-.global ASM_PFX(SetJump)
-ASM_PFX(SetJump):
- push %rcx
- add $0xffffffffffffffe0,%rsp
- call _InternalAssertJumpBuffer
- add $0x20,%rsp
- pop %rcx
- pop %rdx
- mov %rbx,(%rcx)
- mov %rsp,0x8(%rcx)
- mov %rbp,0x10(%rcx)
- mov %rdi,0x18(%rcx)
- mov %rsi,0x20(%rcx)
- mov %r12,0x28(%rcx)
- mov %r13,0x30(%rcx)
- mov %r14,0x38(%rcx)
- mov %r15,0x40(%rcx)
- mov %rdx,0x48(%rcx)
- xor %rax,%rax
- jmpq *%rdx
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# SetJump.S\r
+#\r
+# Abstract:\r
+#\r
+# Implementation of SetJump() on x86_64\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EdkIIGlueBase.h>\r
+.extern InternalAssertJumpBuffer;\r
+.global ASM_PFX(SetJump)\r
+ASM_PFX(SetJump):\r
+ push %rcx\r
+ add $0xffffffffffffffe0,%rsp\r
+ call _InternalAssertJumpBuffer\r
+ add $0x20,%rsp\r
+ pop %rcx\r
+ pop %rdx\r
+ mov %rbx,(%rcx)\r
+ mov %rsp,0x8(%rcx)\r
+ mov %rbp,0x10(%rcx)\r
+ mov %rdi,0x18(%rcx)\r
+ mov %rsi,0x20(%rcx)\r
+ mov %r12,0x28(%rcx)\r
+ mov %r13,0x30(%rcx)\r
+ mov %r14,0x38(%rcx)\r
+ mov %r15,0x40(%rcx)\r
+ mov %rdx,0x48(%rcx)\r
+ xor %rax,%rax\r
+ jmpq *%rdx\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# SwitchStack.S
-#
-# Abstract:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# Routine Description:
-#
-# Routine for switching stacks with 1 parameter
-#
-# Arguments:
-#
-# (rdi) EntryPoint - Entry point with new stack.
-# (rsi) Context1 - Parameter1 for entry point.
-# (rdx) Context2 - Parameter2 for entry point.
-# (rcx) NewStack - Pointer to new stack.
-#
-# Returns:
-#
-# None
-#
-#------------------------------------------------------------------------------
-.global ASM_PFX(InternalSwitchStack)
-ASM_PFX(InternalSwitchStack):
- mov %rcx, %rax
- mov %rdx, %rcx
- mov %r8, %rdx
- lea -0x20(%r9), %rsp
- call *%rax
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# SwitchStack.S\r
+#\r
+# Abstract:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# Routine Description:\r
+#\r
+# Routine for switching stacks with 1 parameter\r
+#\r
+# Arguments:\r
+#\r
+# (rdi) EntryPoint - Entry point with new stack.\r
+# (rsi) Context1 - Parameter1 for entry point.\r
+# (rdx) Context2 - Parameter2 for entry point.\r
+# (rcx) NewStack - Pointer to new stack.\r
+#\r
+# Returns:\r
+#\r
+# None\r
+#\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(InternalSwitchStack)\r
+ASM_PFX(InternalSwitchStack):\r
+ mov %rcx, %rax\r
+ mov %rdx, %rcx\r
+ mov %r8, %rdx\r
+ lea -0x20(%r9), %rsp\r
+ call *%rax\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006 - 2009, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# Thunk16.S
-#
-# Abstract:
-#
-# Real mode thunk
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-
-.globl ASM_PFX(m16Start)
-.globl ASM_PFX(m16Size)
-.globl ASM_PFX(mThunk16Attr)
-.globl ASM_PFX(m16Gdt)
-.globl ASM_PFX(m16GdtrBase)
-.globl ASM_PFX(mTransition)
-.globl ASM_PFX(InternalAsmThunk16)
-
-# define the structure of IA32_REGS
-.equ _EDI, 0 #size 4
-.equ _ESI, 4 #size 4
-.equ _EBP, 8 #size 4
-.equ _ESP, 12 #size 4
-.equ _EBX, 16 #size 4
-.equ _EDX, 20 #size 4
-.equ _ECX, 24 #size 4
-.equ _EAX, 28 #size 4
-.equ _DS, 32 #size 2
-.equ _ES, 34 #size 2
-.equ _FS, 36 #size 2
-.equ _GS, 38 #size 2
-.equ _EFLAGS, 40 #size 8
-.equ _EIP, 48 #size 4
-.equ _CS, 52 #size 2
-.equ _SS, 54 #size 2
-.equ IA32_REGS_SIZE, 56
-
- .data
-
-ASM_PFX(m16Size): .word ASM_PFX(InternalAsmThunk16) - ASM_PFX(m16Start)
-ASM_PFX(mThunk16Attr): .word _ThunkAttr - ASM_PFX(m16Start)
-ASM_PFX(m16Gdt): .word ASM_PFX(NullSeg) - ASM_PFX(m16Start)
-ASM_PFX(m16GdtrBase): .word _16GdtrBase - ASM_PFX(m16Start)
-ASM_PFX(mTransition): .word _EntryPoint - ASM_PFX(m16Start)
-
- .text
-
-ASM_PFX(m16Start):
-
-SavedGdt: .space 10
-
-#------------------------------------------------------------------------------
-# _BackFromUserCode() takes control in real mode after 'retf' has been executed
-# by user code. It will be shadowed to somewhere in memory below 1MB.
-#------------------------------------------------------------------------------
-.globl ASM_PFX(BackFromUserCode)
-ASM_PFX(BackFromUserCode):
- #
- # The order of saved registers on the stack matches the order they appears
- # in IA32_REGS structure. This facilitates wrapper function to extract them
- # into that structure.
- #
- # Some instructions for manipulation of segment registers have to be written
- # in opcode since 64-bit MASM prevents accesses to those registers.
- #
- .byte 0x16 # push ss
- .byte 0xe # push cs
- .byte 0x66
- call L_Base # push eip
-L_Base:
- .byte 0x66
- pushq $0 # reserved high order 32 bits of EFlags
- .byte 0x66, 0x9c # pushfd actually
- cli # disable interrupts
- push %gs
- push %fs
- .byte 6 # push es
- .byte 0x1e # push ds
- .byte 0x66,0x60 # pushad
- .byte 0x66,0xba # mov edx, imm32
-_ThunkAttr: .space 4
- testb $THUNK_ATTRIBUTE_DISABLE_A20_MASK_INT_15, %dl
- jz L_1
- movl $0x15cd2401,%eax # mov ax, 2401h & int 15h
- cli # disable interrupts
- jnc L_2
-L_1:
- testb $THUNK_ATTRIBUTE_DISABLE_A20_MASK_KBD_CTRL, %dl
- jz L_2
- inb $0x92,%al
- orb $2,%al
- outb %al, $0x92 # deactivate A20M#
-L_2:
- movl %ss,%eax
- lea IA32_REGS_SIZE(%esp), %bp
- #
- # rsi in the following 2 instructions is indeed bp in 16-bit code
- #
- movw %bp, (_ESP - IA32_REGS_SIZE)(%rsi)
- .byte 0x66
- movl (_EIP - IA32_REGS_SIZE)(%rsi), %ebx
- shlw $4,%ax # shl eax, 4
- addw %ax,%bp # add ebp, eax
- movw %cs,%ax
- shlw $4,%ax
- lea (L_64BitCode - L_Base)(%ebx, %eax), %ax
- .byte 0x66,0x2e,0x89,0x87 # mov cs:[bx + (L_64Eip - L_Base)], eax
- .word L_64Eip - L_Base
- .byte 0x66,0xb8 # mov eax, imm32
-SavedCr4: .space 4
- movq %rax, %cr4
- #
- # rdi in the instruction below is indeed bx in 16-bit code
- #
- .byte 0x66,0x2e # 2eh is "cs:" segment override
- lgdt (SavedGdt - L_Base)(%rdi)
- .byte 0x66
- movl $0xc0000080,%ecx
- rdmsr
- orb $1,%ah
- wrmsr
- .byte 0x66,0xb8 # mov eax, imm32
-SavedCr0: .space 4
- movq %rax, %cr0
- .byte 0x66,0xea # jmp far cs:L_64Bit
-L_64Eip: .space 4
-SavedCs: .space 2
-L_64BitCode:
- .byte 0x90
- .byte 0x67,0xbc # mov esp, imm32
-SavedSp: .space 4 # restore stack
- nop
- ret
-
-_EntryPoint: .long ASM_PFX(ToUserCode) - ASM_PFX(m16Start)
- .word CODE16
-_16Gdtr: .word GDT_SIZE - 1
-_16GdtrBase: .quad ASM_PFX(NullSeg)
-_16Idtr: .word 0x3ff
- .long 0
-
-#------------------------------------------------------------------------------
-# _ToUserCode() takes control in real mode before passing control to user code.
-# It will be shadowed to somewhere in memory below 1MB.
-#------------------------------------------------------------------------------
-.globl ASM_PFX(ToUserCode)
-ASM_PFX(ToUserCode):
- movl %edx,%ss # set new segment selectors
- movl %edx,%ds
- movl %edx,%es
- movl %edx,%fs
- movl %edx,%gs
- .byte 0x66
- movl $0xc0000080,%ecx
- movq %rax, %cr0
- rdmsr
- andb $0b11111110, %ah
- wrmsr
- movq %rbp, %cr4
- movl %esi,%ss # set up 16-bit stack segment
- movw %bx,%sp # set up 16-bit stack pointer
- .byte 0x66 # make the following call 32-bit
- call L_Base1 # push eip
-L_Base1:
- popw %bp # ebp <- address of L_Base1
- pushq (IA32_REGS_SIZE + 2)(%esp)
- lea 0x0c(%rsi), %eax
- pushq %rax
- lret # execution begins at next instruction
-L_RealMode:
- .byte 0x66,0x2e # CS and operand size override
- lidt (_16Idtr - L_Base1)(%rsi)
- .byte 0x66,0x61 # popad
- .byte 0x1f # pop ds
- .byte 0x7 # pop es
- .byte 0x0f, 0xa1 # pop fs
- .byte 0x0f, 0xa9 # pop gs
- .byte 0x66, 0x9d # popfd
- leaw 4(%esp),%sp # skip high order 32 bits of EFlags
- .byte 0x66 # make the following retf 32-bit
- lret # transfer control to user code
-
-.equ CODE16, ASM_PFX(_16Code) - .
-.equ DATA16, ASM_PFX(_16Data) - .
-.equ DATA32, ASM_PFX(_32Data) - .
-
-ASM_PFX(NullSeg): .quad 0
-ASM_PFX(_16Code):
- .word -1
- .word 0
- .byte 0
- .byte 0x9b
- .byte 0x8f # 16-bit segment, 4GB limit
- .byte 0
-ASM_PFX(_16Data):
- .word -1
- .word 0
- .byte 0
- .byte 0x93
- .byte 0x8f # 16-bit segment, 4GB limit
- .byte 0
-ASM_PFX(_32Data):
- .word -1
- .word 0
- .byte 0
- .byte 0x93
- .byte 0xcf # 16-bit segment, 4GB limit
- .byte 0
-
-.equ GDT_SIZE, . - ASM_PFX(NullSeg)
-
-#------------------------------------------------------------------------------
-# IA32_REGISTER_SET *
-# EFIAPI
-# InternalAsmThunk16 (
-# IN IA32_REGISTER_SET *RegisterSet,
-# IN OUT VOID *Transition
-# );
-#------------------------------------------------------------------------------
-
-.globl ASM_PFX(InternalAsmThunk16)
-ASM_PFX(InternalAsmThunk16):
- pushq %rbp
- pushq %rbx
- pushq %rsi
- pushq %rdi
-
- movq %ds, %rbx
- pushq %rbx # Save ds segment register on the stack
- movq %es, %rbx
- pushq %rbx # Save es segment register on the stack
- movq %ss, %rbx
- pushq %rbx # Save ss segment register on the stack
-
- .byte 0x0f, 0xa0 #push fs
- .byte 0x0f, 0xa8 #push gs
- movq %rcx, %rsi
- movzwl _SS(%rsi), %r8d
- movl _ESP(%rsi), %edi
- lea -(IA32_REGS_SIZE + 4)(%edi), %rdi
- imul $16, %r8d, %eax
- movl %edi,%ebx # ebx <- stack for 16-bit code
- pushq $(IA32_REGS_SIZE / 4)
- addl %eax,%edi # edi <- linear address of 16-bit stack
- popq %rcx
- rep
- movsl # copy RegSet
- lea (SavedCr4 - ASM_PFX(m16Start))(%rdx), %ecx
- movl %edx,%eax # eax <- transition code address
- andl $0xf,%edx
- shll $12,%eax # segment address in high order 16 bits
- lea (_BackFromUserCode - ASM_PFX(m16Start))(%rdx), %ax
- stosl # [edi] <- return address of user code
- sgdt (SavedGdt - SavedCr4)(%rcx)
- sidt 0x50(%rsp)
- movq %cr0, %rax
- movl %eax, (SavedCr0 - SavedCr4)(%rcx)
- andl $0x7ffffffe,%eax # clear PE, PG bits
- movq %cr4, %rbp
- movl %ebp, (%rcx) # save CR4 in SavedCr4
- andl $0x300,%ebp # clear all but PCE and OSFXSR bits
- movl %r8d, %esi # esi <- 16-bit stack segment
- .byte 0x6a, DATA32
- popq %rdx
- lgdt (_16Gdtr - SavedCr4)(%rcx)
- movl %edx,%ss
- pushfq
- lea -8(%rdx), %edx
- lea L_RetFromRealMode, %r8
- pushq %r8
- movl %cs, %r8d
- movw %r8w, (SavedCs - SavedCr4)(%rcx)
- movl %esp, (SavedSp - SavedCr4)(%rcx)
- .byte 0xff, 0x69 # jmp (_EntryPoint - SavedCr4)(%rcx)
- .byte _EntryPoint - SavedCr4
-L_RetFromRealMode:
- popfq
- lidt 0x50(%rsp)
- lea -IA32_REGS_SIZE(%rbp), %eax
- .byte 0x0f, 0xa9 # pop gs
- .byte 0x0f, 0xa1 # pop fs
-
- popq %rbx
- movq %rbx, %ss
- popq %rbx
- movq %rbx, %es
- popq %rbx
- movq %rbx, %ds
-
- popq %rdi
- popq %rsi
- popq %rbx
- popq %rbp
-
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006 - 2009, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# Thunk16.S\r
+#\r
+# Abstract:\r
+#\r
+# Real mode thunk\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+\r
+.globl ASM_PFX(m16Start)\r
+.globl ASM_PFX(m16Size)\r
+.globl ASM_PFX(mThunk16Attr)\r
+.globl ASM_PFX(m16Gdt)\r
+.globl ASM_PFX(m16GdtrBase)\r
+.globl ASM_PFX(mTransition)\r
+.globl ASM_PFX(InternalAsmThunk16)\r
+\r
+# define the structure of IA32_REGS\r
+.equ _EDI, 0 #size 4\r
+.equ _ESI, 4 #size 4\r
+.equ _EBP, 8 #size 4\r
+.equ _ESP, 12 #size 4\r
+.equ _EBX, 16 #size 4\r
+.equ _EDX, 20 #size 4\r
+.equ _ECX, 24 #size 4\r
+.equ _EAX, 28 #size 4\r
+.equ _DS, 32 #size 2\r
+.equ _ES, 34 #size 2\r
+.equ _FS, 36 #size 2\r
+.equ _GS, 38 #size 2\r
+.equ _EFLAGS, 40 #size 8\r
+.equ _EIP, 48 #size 4\r
+.equ _CS, 52 #size 2\r
+.equ _SS, 54 #size 2\r
+.equ IA32_REGS_SIZE, 56\r
+\r
+ .data\r
+\r
+ASM_PFX(m16Size): .word ASM_PFX(InternalAsmThunk16) - ASM_PFX(m16Start)\r
+ASM_PFX(mThunk16Attr): .word _ThunkAttr - ASM_PFX(m16Start)\r
+ASM_PFX(m16Gdt): .word ASM_PFX(NullSeg) - ASM_PFX(m16Start)\r
+ASM_PFX(m16GdtrBase): .word _16GdtrBase - ASM_PFX(m16Start)\r
+ASM_PFX(mTransition): .word _EntryPoint - ASM_PFX(m16Start)\r
+\r
+ .text\r
+\r
+ASM_PFX(m16Start):\r
+\r
+SavedGdt: .space 10\r
+\r
+#------------------------------------------------------------------------------\r
+# _BackFromUserCode() takes control in real mode after 'retf' has been executed\r
+# by user code. It will be shadowed to somewhere in memory below 1MB.\r
+#------------------------------------------------------------------------------\r
+.globl ASM_PFX(BackFromUserCode)\r
+ASM_PFX(BackFromUserCode):\r
+ #\r
+ # The order of saved registers on the stack matches the order they appears\r
+ # in IA32_REGS structure. This facilitates wrapper function to extract them\r
+ # into that structure.\r
+ #\r
+ # Some instructions for manipulation of segment registers have to be written\r
+ # in opcode since 64-bit MASM prevents accesses to those registers.\r
+ #\r
+ .byte 0x16 # push ss\r
+ .byte 0xe # push cs\r
+ .byte 0x66\r
+ call L_Base # push eip\r
+L_Base: \r
+ .byte 0x66\r
+ pushq $0 # reserved high order 32 bits of EFlags\r
+ .byte 0x66, 0x9c # pushfd actually\r
+ cli # disable interrupts\r
+ push %gs\r
+ push %fs\r
+ .byte 6 # push es\r
+ .byte 0x1e # push ds\r
+ .byte 0x66,0x60 # pushad\r
+ .byte 0x66,0xba # mov edx, imm32\r
+_ThunkAttr: .space 4\r
+ testb $THUNK_ATTRIBUTE_DISABLE_A20_MASK_INT_15, %dl\r
+ jz L_1\r
+ movl $0x15cd2401,%eax # mov ax, 2401h & int 15h\r
+ cli # disable interrupts\r
+ jnc L_2\r
+L_1: \r
+ testb $THUNK_ATTRIBUTE_DISABLE_A20_MASK_KBD_CTRL, %dl\r
+ jz L_2\r
+ inb $0x92,%al\r
+ orb $2,%al\r
+ outb %al, $0x92 # deactivate A20M#\r
+L_2: \r
+ movl %ss,%eax\r
+ lea IA32_REGS_SIZE(%esp), %bp\r
+ #\r
+ # rsi in the following 2 instructions is indeed bp in 16-bit code\r
+ #\r
+ movw %bp, (_ESP - IA32_REGS_SIZE)(%rsi)\r
+ .byte 0x66\r
+ movl (_EIP - IA32_REGS_SIZE)(%rsi), %ebx\r
+ shlw $4,%ax # shl eax, 4\r
+ addw %ax,%bp # add ebp, eax\r
+ movw %cs,%ax\r
+ shlw $4,%ax\r
+ lea (L_64BitCode - L_Base)(%ebx, %eax), %ax\r
+ .byte 0x66,0x2e,0x89,0x87 # mov cs:[bx + (L_64Eip - L_Base)], eax\r
+ .word L_64Eip - L_Base\r
+ .byte 0x66,0xb8 # mov eax, imm32\r
+SavedCr4: .space 4\r
+ movq %rax, %cr4\r
+ #\r
+ # rdi in the instruction below is indeed bx in 16-bit code\r
+ #\r
+ .byte 0x66,0x2e # 2eh is "cs:" segment override\r
+ lgdt (SavedGdt - L_Base)(%rdi)\r
+ .byte 0x66\r
+ movl $0xc0000080,%ecx\r
+ rdmsr\r
+ orb $1,%ah\r
+ wrmsr\r
+ .byte 0x66,0xb8 # mov eax, imm32\r
+SavedCr0: .space 4\r
+ movq %rax, %cr0\r
+ .byte 0x66,0xea # jmp far cs:L_64Bit\r
+L_64Eip: .space 4\r
+SavedCs: .space 2\r
+L_64BitCode: \r
+ .byte 0x90\r
+ .byte 0x67,0xbc # mov esp, imm32\r
+SavedSp: .space 4 # restore stack\r
+ nop\r
+ ret\r
+\r
+_EntryPoint: .long ASM_PFX(ToUserCode) - ASM_PFX(m16Start)\r
+ .word CODE16\r
+_16Gdtr: .word GDT_SIZE - 1\r
+_16GdtrBase: .quad ASM_PFX(NullSeg)\r
+_16Idtr: .word 0x3ff\r
+ .long 0\r
+\r
+#------------------------------------------------------------------------------\r
+# _ToUserCode() takes control in real mode before passing control to user code.\r
+# It will be shadowed to somewhere in memory below 1MB.\r
+#------------------------------------------------------------------------------\r
+.globl ASM_PFX(ToUserCode)\r
+ASM_PFX(ToUserCode):\r
+ movl %edx,%ss # set new segment selectors\r
+ movl %edx,%ds\r
+ movl %edx,%es\r
+ movl %edx,%fs\r
+ movl %edx,%gs\r
+ .byte 0x66\r
+ movl $0xc0000080,%ecx\r
+ movq %rax, %cr0\r
+ rdmsr\r
+ andb $0b11111110, %ah \r
+ wrmsr\r
+ movq %rbp, %cr4\r
+ movl %esi,%ss # set up 16-bit stack segment\r
+ movw %bx,%sp # set up 16-bit stack pointer\r
+ .byte 0x66 # make the following call 32-bit\r
+ call L_Base1 # push eip\r
+L_Base1: \r
+ popw %bp # ebp <- address of L_Base1\r
+ pushq (IA32_REGS_SIZE + 2)(%esp)\r
+ lea 0x0c(%rsi), %eax\r
+ pushq %rax\r
+ lret # execution begins at next instruction\r
+L_RealMode: \r
+ .byte 0x66,0x2e # CS and operand size override\r
+ lidt (_16Idtr - L_Base1)(%rsi)\r
+ .byte 0x66,0x61 # popad\r
+ .byte 0x1f # pop ds\r
+ .byte 0x7 # pop es\r
+ .byte 0x0f, 0xa1 # pop fs\r
+ .byte 0x0f, 0xa9 # pop gs\r
+ .byte 0x66, 0x9d # popfd\r
+ leaw 4(%esp),%sp # skip high order 32 bits of EFlags\r
+ .byte 0x66 # make the following retf 32-bit\r
+ lret # transfer control to user code\r
+\r
+.equ CODE16, ASM_PFX(_16Code) - .\r
+.equ DATA16, ASM_PFX(_16Data) - .\r
+.equ DATA32, ASM_PFX(_32Data) - .\r
+\r
+ASM_PFX(NullSeg): .quad 0\r
+ASM_PFX(_16Code):\r
+ .word -1\r
+ .word 0\r
+ .byte 0\r
+ .byte 0x9b\r
+ .byte 0x8f # 16-bit segment, 4GB limit\r
+ .byte 0\r
+ASM_PFX(_16Data):\r
+ .word -1\r
+ .word 0\r
+ .byte 0\r
+ .byte 0x93\r
+ .byte 0x8f # 16-bit segment, 4GB limit\r
+ .byte 0\r
+ASM_PFX(_32Data):\r
+ .word -1\r
+ .word 0\r
+ .byte 0\r
+ .byte 0x93\r
+ .byte 0xcf # 16-bit segment, 4GB limit\r
+ .byte 0\r
+\r
+.equ GDT_SIZE, . - ASM_PFX(NullSeg)\r
+\r
+#------------------------------------------------------------------------------\r
+# IA32_REGISTER_SET *\r
+# EFIAPI\r
+# InternalAsmThunk16 (\r
+# IN IA32_REGISTER_SET *RegisterSet,\r
+# IN OUT VOID *Transition\r
+# );\r
+#------------------------------------------------------------------------------\r
+\r
+.globl ASM_PFX(InternalAsmThunk16)\r
+ASM_PFX(InternalAsmThunk16):\r
+ pushq %rbp\r
+ pushq %rbx\r
+ pushq %rsi\r
+ pushq %rdi\r
+ \r
+ movq %ds, %rbx\r
+ pushq %rbx # Save ds segment register on the stack\r
+ movq %es, %rbx\r
+ pushq %rbx # Save es segment register on the stack\r
+ movq %ss, %rbx\r
+ pushq %rbx # Save ss segment register on the stack\r
+\r
+ .byte 0x0f, 0xa0 #push fs\r
+ .byte 0x0f, 0xa8 #push gs\r
+ movq %rcx, %rsi\r
+ movzwl _SS(%rsi), %r8d\r
+ movl _ESP(%rsi), %edi\r
+ lea -(IA32_REGS_SIZE + 4)(%edi), %rdi\r
+ imul $16, %r8d, %eax \r
+ movl %edi,%ebx # ebx <- stack for 16-bit code\r
+ pushq $(IA32_REGS_SIZE / 4)\r
+ addl %eax,%edi # edi <- linear address of 16-bit stack\r
+ popq %rcx\r
+ rep\r
+ movsl # copy RegSet\r
+ lea (SavedCr4 - ASM_PFX(m16Start))(%rdx), %ecx\r
+ movl %edx,%eax # eax <- transition code address\r
+ andl $0xf,%edx\r
+ shll $12,%eax # segment address in high order 16 bits\r
+ lea (_BackFromUserCode - ASM_PFX(m16Start))(%rdx), %ax\r
+ stosl # [edi] <- return address of user code\r
+ sgdt (SavedGdt - SavedCr4)(%rcx) \r
+ sidt 0x50(%rsp)\r
+ movq %cr0, %rax\r
+ movl %eax, (SavedCr0 - SavedCr4)(%rcx)\r
+ andl $0x7ffffffe,%eax # clear PE, PG bits\r
+ movq %cr4, %rbp\r
+ movl %ebp, (%rcx) # save CR4 in SavedCr4\r
+ andl $0x300,%ebp # clear all but PCE and OSFXSR bits\r
+ movl %r8d, %esi # esi <- 16-bit stack segment\r
+ .byte 0x6a, DATA32\r
+ popq %rdx\r
+ lgdt (_16Gdtr - SavedCr4)(%rcx)\r
+ movl %edx,%ss\r
+ pushfq\r
+ lea -8(%rdx), %edx\r
+ lea L_RetFromRealMode, %r8\r
+ pushq %r8\r
+ movl %cs, %r8d\r
+ movw %r8w, (SavedCs - SavedCr4)(%rcx)\r
+ movl %esp, (SavedSp - SavedCr4)(%rcx)\r
+ .byte 0xff, 0x69 # jmp (_EntryPoint - SavedCr4)(%rcx)\r
+ .byte _EntryPoint - SavedCr4\r
+L_RetFromRealMode: \r
+ popfq\r
+ lidt 0x50(%rsp)\r
+ lea -IA32_REGS_SIZE(%rbp), %eax\r
+ .byte 0x0f, 0xa9 # pop gs\r
+ .byte 0x0f, 0xa1 # pop fs\r
+ \r
+ popq %rbx\r
+ movq %rbx, %ss\r
+ popq %rbx\r
+ movq %rbx, %es\r
+ popq %rbx\r
+ movq %rbx, %ds\r
+ \r
+ popq %rdi\r
+ popq %rsi\r
+ popq %rbx\r
+ popq %rbp\r
+\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# Wbinvd.S
-#
-# Abstract:
-#
-# AsmWbinvd function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# AsmWbinvd (
-# VOID
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWbinvd)
-.align 16
-ASM_PFX(AsmWbinvd):
- wbinvd
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# Wbinvd.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWbinvd function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# AsmWbinvd (\r
+# VOID\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWbinvd)\r
+.align 16\r
+ASM_PFX(AsmWbinvd):\r
+ wbinvd\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteCr0.S
-#
-# Abstract:
-#
-# AsmWriteCr0 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmWriteCr0 (
-# UINTN Cr0
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteCr0)
-ASM_PFX(AsmWriteCr0):
- mov %rcx,%cr0
- mov %rcx,%rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteCr0.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteCr0 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmWriteCr0 (\r
+# UINTN Cr0\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteCr0)\r
+ASM_PFX(AsmWriteCr0):\r
+ mov %rcx,%cr0\r
+ mov %rcx,%rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteCr2.S
-#
-# Abstract:
-#
-# AsmWriteCr2 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmWriteCr2 (
-# UINTN Cr2
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteCr2)
-ASM_PFX(AsmWriteCr2):
- mov %rcx,%cr2
- mov %rcx,%rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteCr2.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteCr2 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmWriteCr2 (\r
+# UINTN Cr2\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteCr2)\r
+ASM_PFX(AsmWriteCr2):\r
+ mov %rcx,%cr2\r
+ mov %rcx,%rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteCr3.S
-#
-# Abstract:
-#
-# AsmWriteCr3 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmWriteCr3 (
-# UINTN Cr3
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteCr3)
-ASM_PFX(AsmWriteCr3):
- mov %rcx,%cr3
- mov %rcx,%rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteCr3.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteCr3 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmWriteCr3 (\r
+# UINTN Cr3\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteCr3)\r
+ASM_PFX(AsmWriteCr3):\r
+ mov %rcx,%cr3\r
+ mov %rcx,%rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteCr4.S
-#
-# Abstract:
-#
-# AsmWriteCr4 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmWriteCr4 (
-# UINTN Cr4
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteCr4)
-ASM_PFX(AsmWriteCr4):
- mov %rcx,%cr4
- mov %rcx,%rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteCr4.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteCr4 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmWriteCr4 (\r
+# UINTN Cr4\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteCr4)\r
+ASM_PFX(AsmWriteCr4):\r
+ mov %rcx,%cr4\r
+ mov %rcx,%rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteDr0.S
-#
-# Abstract:
-#
-# AsmWriteDr0 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmWriteDr0 (
-# UINTN Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteDr0)
-.align 16
-ASM_PFX(AsmWriteDr0):
- mov %rcx, %dr0
- mov %rcx, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteDr0.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteDr0 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmWriteDr0 (\r
+# UINTN Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteDr0)\r
+.align 16\r
+ASM_PFX(AsmWriteDr0):\r
+ mov %rcx, %dr0\r
+ mov %rcx, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteDr1.S
-#
-# Abstract:
-#
-# AsmWriteDr1 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmWriteDr1 (
-# UINTN Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteDr1)
-.align 16
-ASM_PFX(AsmWriteDr1):
- mov %rcx, %dr1
- mov %rcx, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteDr1.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteDr1 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmWriteDr1 (\r
+# UINTN Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteDr1)\r
+.align 16\r
+ASM_PFX(AsmWriteDr1):\r
+ mov %rcx, %dr1\r
+ mov %rcx, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteDr2.S
-#
-# Abstract:
-#
-# AsmWriteDr2 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmWriteDr2 (
-# UINTN Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteDr2)
-.align 16
-ASM_PFX(AsmWriteDr2):
- mov %rcx, %dr2
- mov %rcx, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteDr2.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteDr2 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmWriteDr2 (\r
+# UINTN Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteDr2)\r
+.align 16\r
+ASM_PFX(AsmWriteDr2):\r
+ mov %rcx, %dr2\r
+ mov %rcx, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteDr3.S
-#
-# Abstract:
-#
-# AsmWriteDr3 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmWriteDr3 (
-# UINTN Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteDr3)
-.align 16
-ASM_PFX(AsmWriteDr3):
- mov %rcx, %dr3
- mov %rcx, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteDr3.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteDr3 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmWriteDr3 (\r
+# UINTN Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteDr3)\r
+.align 16\r
+ASM_PFX(AsmWriteDr3):\r
+ mov %rcx, %dr3\r
+ mov %rcx, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteDr4.S
-#
-# Abstract:
-#
-# AsmWriteDr4 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmWriteDr4 (
-# IN UINTN Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteDr4)
-ASM_PFX(AsmWriteDr4):
- mov %rcx, %dr4
- mov %rcx, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteDr4.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteDr4 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmWriteDr4 (\r
+# IN UINTN Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteDr4)\r
+ASM_PFX(AsmWriteDr4):\r
+ mov %rcx, %dr4\r
+ mov %rcx, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteDr5.S
-#
-# Abstract:
-#
-# AsmWriteDr5 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmWriteDr5 (
-# IN UINTN Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteDr5)
-ASM_PFX(AsmWriteDr5):
- mov %rcx, %dr5
- mov %rcx, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteDr5.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteDr5 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmWriteDr5 (\r
+# IN UINTN Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteDr5)\r
+ASM_PFX(AsmWriteDr5):\r
+ mov %rcx, %dr5\r
+ mov %rcx, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteDr6.S
-#
-# Abstract:
-#
-# AsmWriteDr6 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmWriteDr6 (
-# IN UINTN Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteDr6)
-ASM_PFX(AsmWriteDr6):
- mov %rcx, %dr6
- mov %rcx, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteDr6.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteDr6 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmWriteDr6 (\r
+# IN UINTN Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteDr6)\r
+ASM_PFX(AsmWriteDr6):\r
+ mov %rcx, %dr6\r
+ mov %rcx, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteDr7.S
-#
-# Abstract:
-#
-# AsmWriteDr7 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINTN
-# EFIAPI
-# AsmWriteDr7 (
-# IN UINTN Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteDr7)
-ASM_PFX(AsmWriteDr7):
- mov %rcx, %dr7
- mov %rcx, %rax
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteDr7.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteDr7 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# EFIAPI\r
+# AsmWriteDr7 (\r
+# IN UINTN Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteDr7)\r
+ASM_PFX(AsmWriteDr7):\r
+ mov %rcx, %dr7\r
+ mov %rcx, %rax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteGdtr.S
-#
-# Abstract:
-#
-# AsmWriteGdtr function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# InternalX86WriteGdtr (
-# IN CONST IA32_DESCRIPTOR *Idtr
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(InternalX86WriteGdtr)
-ASM_PFX(InternalX86WriteGdtr):
- lgdt (%rcx)
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteGdtr.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteGdtr function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# InternalX86WriteGdtr (\r
+# IN CONST IA32_DESCRIPTOR *Idtr\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(InternalX86WriteGdtr)\r
+ASM_PFX(InternalX86WriteGdtr):\r
+ lgdt (%rcx)\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteIdtr.S
-#
-# Abstract:
-#
-# AsmWriteIdtr function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# InternalX86WriteIdtr (
-# IN CONST IA32_DESCRIPTOR *Idtr
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(InternalX86WriteIdtr)
-.align 16
-ASM_PFX(InternalX86WriteIdtr):
- lidt (%rcx)
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteIdtr.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteIdtr function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# InternalX86WriteIdtr (\r
+# IN CONST IA32_DESCRIPTOR *Idtr\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(InternalX86WriteIdtr)\r
+.align 16\r
+ASM_PFX(InternalX86WriteIdtr):\r
+ lidt (%rcx)\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteLdtr.S
-#
-# Abstract:
-#
-# AsmWriteLdtr function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# AsmWriteLdtr (
-# IN UINT16 Ldtr
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteLdtr);
-.align 16
-ASM_PFX(AsmWriteLdtr):
- lldt %cx
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteLdtr.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteLdtr function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# AsmWriteLdtr (\r
+# IN UINT16 Ldtr\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteLdtr);\r
+.align 16\r
+ASM_PFX(AsmWriteLdtr):\r
+ lldt %cx\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteMm0.S
-#
-# Abstract:
-#
-# AsmWriteMm0 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# AsmWriteMm0 (
-# IN UINT64 Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteMm0);
-ASM_PFX(AsmWriteMm0):
- movd %rcx, %xmm0
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteMm0.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteMm0 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# AsmWriteMm0 (\r
+# IN UINT64 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteMm0);\r
+ASM_PFX(AsmWriteMm0):\r
+ movd %rcx, %xmm0\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteMm1.S
-#
-# Abstract:
-#
-# AsmWriteMm1 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# AsmWriteMm1 (
-# IN UINT64 Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteMm1);
-ASM_PFX(AsmWriteMm1):
- movd %rcx, %mm1
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteMm1.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteMm1 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# AsmWriteMm1 (\r
+# IN UINT64 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteMm1);\r
+ASM_PFX(AsmWriteMm1):\r
+ movd %rcx, %mm1\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteMm2.S
-#
-# Abstract:
-#
-# AsmWriteMm2 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# AsmWriteMm2 (
-# IN UINT64 Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteMm2)
-ASM_PFX(AsmWriteMm2):
- movd %rcx, %mm2
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteMm2.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteMm2 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# AsmWriteMm2 (\r
+# IN UINT64 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteMm2)\r
+ASM_PFX(AsmWriteMm2):\r
+ movd %rcx, %mm2\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteMm3.S
-#
-# Abstract:
-#
-# AsmWriteMm3 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# AsmWriteMm3 (
-# IN UINT64 Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteMm3)
-ASM_PFX(AsmWriteMm3):
- movd %rcx, %mm3
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteMm3.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteMm3 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# AsmWriteMm3 (\r
+# IN UINT64 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteMm3)\r
+ASM_PFX(AsmWriteMm3):\r
+ movd %rcx, %mm3\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteMm4.S
-#
-# Abstract:
-#
-# AsmWriteMm4 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# AsmWriteMm4 (
-# IN UINT64 Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteMm4)
-ASM_PFX(AsmWriteMm4):
- movd %rcx, %mm4
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteMm4.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteMm4 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# AsmWriteMm4 (\r
+# IN UINT64 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteMm4)\r
+ASM_PFX(AsmWriteMm4):\r
+ movd %rcx, %mm4\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteMm5.S
-#
-# Abstract:
-#
-# AsmWriteMm5 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# AsmWriteMm5 (
-# IN UINT64 Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteMm5)
-ASM_PFX(AsmWriteMm5):
- movd %rcx, %mm5
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteMm5.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteMm5 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# AsmWriteMm5 (\r
+# IN UINT64 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteMm5)\r
+ASM_PFX(AsmWriteMm5):\r
+ movd %rcx, %mm5\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteMm6.S
-#
-# Abstract:
-#
-# AsmWriteMm6 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# AsmWriteMm6 (
-# IN UINT64 Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteMm6)
-ASM_PFX(AsmWriteMm6):
- movd %rcx, %mm6
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteMm6.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteMm6 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# AsmWriteMm6 (\r
+# IN UINT64 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteMm6)\r
+ASM_PFX(AsmWriteMm6):\r
+ movd %rcx, %mm6\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteMm7.S
-#
-# Abstract:
-#
-# AsmWriteMm7 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# AsmWriteMm7 (
-# IN UINT64 Value
-# );
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteMm7)
-ASM_PFX(AsmWriteMm7):
- movd %rcx, %mm7
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteMm7.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteMm7 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# AsmWriteMm7 (\r
+# IN UINT64 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteMm7)\r
+ASM_PFX(AsmWriteMm7):\r
+ movd %rcx, %mm7\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteMsr64.S
-#
-# Abstract:
-#
-# AsmWriteMsr64 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# UINT64
-# EFIAPI
-# AsmWriteMsr64 (
-# IN UINT32 Index,
-# IN UINT64 Value
-# );
-# TODO:
-#------------------------------------------------------------------------------
-.global ASM_PFX(AsmWriteMsr64)
-.align 16
-ASM_PFX(AsmWriteMsr64):
- mov %rdx, %rax
- shr $0x20, %rdx
- wrmsr
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteMsr64.S\r
+#\r
+# Abstract:\r
+#\r
+# AsmWriteMsr64 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# UINT64\r
+# EFIAPI\r
+# AsmWriteMsr64 (\r
+# IN UINT32 Index,\r
+# IN UINT64 Value\r
+# );\r
+# TODO:\r
+#------------------------------------------------------------------------------\r
+.global ASM_PFX(AsmWriteMsr64)\r
+.align 16\r
+ASM_PFX(AsmWriteMsr64):\r
+ mov %rdx, %rax\r
+ shr $0x20, %rdx\r
+ wrmsr\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# CompareMem.Asm
-#
-# Abstract:
-#
-# CompareMem function
-#
-# Notes:
-#
-# The following BaseMemoryLib instances share the same version of this file:
-#
-# BaseMemoryLibRepStr
-# BaseMemoryLibMmx
-# BaseMemoryLibSse2
-#
-#------------------------------------------------------------------------------
-#include <EdkIIGlueBase.h>
-.globl ASM_PFX(InternalMemCompareMem)
-
-#------------------------------------------------------------------------------
-# INTN
-# EFIAPI
-# InternalMemCompareMem (
-# IN CONST VOID *DestinationBuffer,
-# IN CONST VOID *SourceBuffer,
-# IN UINTN Length
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(InternalMemCompareMem):
- push %esi
- push %edi
- movl 12(%esp), %esi
- movl 16(%esp), %edi
- movl 20(%esp), %ecx
- repe cmpsb
- movzbl -1(%esi), %eax
- movzbl -1(%edi), %edx
- subl %edx, %eax
- pop %edi
- pop %esi
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# CompareMem.Asm\r
+#\r
+# Abstract:\r
+#\r
+# CompareMem function\r
+#\r
+# Notes:\r
+#\r
+# The following BaseMemoryLib instances share the same version of this file:\r
+#\r
+# BaseMemoryLibRepStr\r
+# BaseMemoryLibMmx\r
+# BaseMemoryLibSse2\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EdkIIGlueBase.h>\r
+.globl ASM_PFX(InternalMemCompareMem)\r
+\r
+#------------------------------------------------------------------------------\r
+# INTN\r
+# EFIAPI\r
+# InternalMemCompareMem (\r
+# IN CONST VOID *DestinationBuffer,\r
+# IN CONST VOID *SourceBuffer,\r
+# IN UINTN Length\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(InternalMemCompareMem):\r
+ push %esi\r
+ push %edi\r
+ movl 12(%esp), %esi\r
+ movl 16(%esp), %edi\r
+ movl 20(%esp), %ecx\r
+ repe cmpsb\r
+ movzbl -1(%esi), %eax\r
+ movzbl -1(%edi), %edx\r
+ subl %edx, %eax\r
+ pop %edi\r
+ pop %esi\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# CopyMem.Asm
-#
-# Abstract:
-#
-# CopyMem function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-#include <EdkIIGlueBase.h>
-.globl ASM_PFX(InternalMemCopyMem)
-
-#------------------------------------------------------------------------------
-# VOID *
-# EFIAPI
-# InternalMemCopyMem (
-# IN VOID *Destination,
-# IN VOID *Source,
-# IN UINTN Count
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(InternalMemCopyMem):
- push %esi
- push %edi
- movl 16(%esp), %esi # esi <- Source
- movl 12(%esp), %edi # edi <- Destination
- movl 20(%esp), %edx # edx <- Count
- leal -1(%esi, %edx), %eax # eax <- End of Source
- cmpl %edi, %esi
- jae L0
- cmpl %edi, %eax
- jae L_CopyBackward # Copy backward if overlapped
-L0:
- movl %edx, %ecx
- andl $3, %edx
- shrl $2, %ecx
- rep
- movsl # Copy as many Dwords as possible
- jmp L_CopyBytes
-L_CopyBackward:
- movl %eax, %esi # esi <- End of Source
- leal -1(%edi, %edx), %edi # edi <- End of Destination
- std
-L_CopyBytes:
- movl %edx, %ecx
- rep
- movsb # Copy bytes backward
- cld
- movl 12(%esp), %eax # eax <- Destination as return value
- pop %edi
- pop %esi
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# CopyMem.Asm\r
+#\r
+# Abstract:\r
+#\r
+# CopyMem function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EdkIIGlueBase.h>\r
+.globl ASM_PFX(InternalMemCopyMem)\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID *\r
+# EFIAPI\r
+# InternalMemCopyMem (\r
+# IN VOID *Destination,\r
+# IN VOID *Source,\r
+# IN UINTN Count\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(InternalMemCopyMem):\r
+ push %esi\r
+ push %edi\r
+ movl 16(%esp), %esi # esi <- Source\r
+ movl 12(%esp), %edi # edi <- Destination\r
+ movl 20(%esp), %edx # edx <- Count\r
+ leal -1(%esi, %edx), %eax # eax <- End of Source\r
+ cmpl %edi, %esi\r
+ jae L0\r
+ cmpl %edi, %eax\r
+ jae L_CopyBackward # Copy backward if overlapped\r
+L0:\r
+ movl %edx, %ecx\r
+ andl $3, %edx\r
+ shrl $2, %ecx\r
+ rep\r
+ movsl # Copy as many Dwords as possible\r
+ jmp L_CopyBytes\r
+L_CopyBackward:\r
+ movl %eax, %esi # esi <- End of Source\r
+ leal -1(%edi, %edx), %edi # edi <- End of Destination\r
+ std\r
+L_CopyBytes:\r
+ movl %edx, %ecx\r
+ rep\r
+ movsb # Copy bytes backward\r
+ cld\r
+ movl 12(%esp), %eax # eax <- Destination as return value\r
+ pop %edi\r
+ pop %esi\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ScanMem16.Asm
-#
-# Abstract:
-#
-# ScanMem16 function
-#
-# Notes:
-#
-# The following BaseMemoryLib instances share the same version of this file:
-#
-# BaseMemoryLibRepStr
-# BaseMemoryLibMmx
-# BaseMemoryLibSse2
-#
-#------------------------------------------------------------------------------
-#include <EdkIIGlueBase.h>
-.globl ASM_PFX(InternalMemScanMem16)
-
-#------------------------------------------------------------------------------
-# CONST VOID *
-# EFIAPI
-# InternalMemScanMem16 (
-# IN CONST VOID *Buffer,
-# IN UINTN Length,
-# IN UINT16 Value
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(InternalMemScanMem16):
- push %edi
- movl 12(%esp), %ecx
- movl 8(%esp), %edi
- movl 16(%esp), %eax
- repne scasw
- leal -2(%edi), %eax
- cmovnz %ecx, %eax
- pop %edi
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ScanMem16.Asm\r
+#\r
+# Abstract:\r
+#\r
+# ScanMem16 function\r
+#\r
+# Notes:\r
+#\r
+# The following BaseMemoryLib instances share the same version of this file:\r
+#\r
+# BaseMemoryLibRepStr\r
+# BaseMemoryLibMmx\r
+# BaseMemoryLibSse2\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EdkIIGlueBase.h>\r
+.globl ASM_PFX(InternalMemScanMem16)\r
+\r
+#------------------------------------------------------------------------------\r
+# CONST VOID *\r
+# EFIAPI\r
+# InternalMemScanMem16 (\r
+# IN CONST VOID *Buffer,\r
+# IN UINTN Length,\r
+# IN UINT16 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(InternalMemScanMem16):\r
+ push %edi\r
+ movl 12(%esp), %ecx\r
+ movl 8(%esp), %edi\r
+ movl 16(%esp), %eax\r
+ repne scasw\r
+ leal -2(%edi), %eax\r
+ cmovnz %ecx, %eax\r
+ pop %edi\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ScanMem32.Asm
-#
-# Abstract:
-#
-# ScanMem32 function
-#
-# Notes:
-#
-# The following BaseMemoryLib instances share the same version of this file:
-#
-# BaseMemoryLibRepStr
-# BaseMemoryLibMmx
-# BaseMemoryLibSse2
-#
-#------------------------------------------------------------------------------
-#include <EdkIIGlueBase.h>
-.globl ASM_PFX(InternalMemScanMem32)
-
-#------------------------------------------------------------------------------
-# CONST VOID *
-# EFIAPI
-# InternalMemScanMem32 (
-# IN CONST VOID *Buffer,
-# IN UINTN Length,
-# IN UINT32 Value
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(InternalMemScanMem32):
- push %edi
- movl 12(%esp), %ecx
- movl 8(%esp), %edi
- movl 16(%esp), %eax
- repne scasl
- leal -4(%edi), %eax
- cmovnz %ecx, %eax
- pop %edi
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ScanMem32.Asm\r
+#\r
+# Abstract:\r
+#\r
+# ScanMem32 function\r
+#\r
+# Notes:\r
+#\r
+# The following BaseMemoryLib instances share the same version of this file:\r
+#\r
+# BaseMemoryLibRepStr\r
+# BaseMemoryLibMmx\r
+# BaseMemoryLibSse2\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EdkIIGlueBase.h>\r
+.globl ASM_PFX(InternalMemScanMem32)\r
+\r
+#------------------------------------------------------------------------------\r
+# CONST VOID *\r
+# EFIAPI\r
+# InternalMemScanMem32 (\r
+# IN CONST VOID *Buffer,\r
+# IN UINTN Length,\r
+# IN UINT32 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(InternalMemScanMem32):\r
+ push %edi\r
+ movl 12(%esp), %ecx\r
+ movl 8(%esp), %edi\r
+ movl 16(%esp), %eax\r
+ repne scasl\r
+ leal -4(%edi), %eax\r
+ cmovnz %ecx, %eax\r
+ pop %edi\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ScanMem64.Asm
-#
-# Abstract:
-#
-# ScanMem64 function
-#
-# Notes:
-#
-# The following BaseMemoryLib instances share the same version of this file:
-#
-# BaseMemoryLibRepStr
-# BaseMemoryLibMmx
-# BaseMemoryLibSse2
-#
-#------------------------------------------------------------------------------
-#include <EdkIIGlueBase.h>
-.globl ASM_PFX(InternalMemScanMem64)
-
-#------------------------------------------------------------------------------
-# CONST VOID *
-# EFIAPI
-# InternalMemScanMem64 (
-# IN CONST VOID *Buffer,
-# IN UINTN Length,
-# IN UINT64 Value
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(InternalMemScanMem64):
- push %edi
- movl 12(%esp), %ecx
- movl 16(%esp), %eax
- movl 20(%esp), %edx
- movl 8(%esp), %edi
-L0:
- cmpl (%edi), %eax
- leal 8(%edi), %edi
- loopne L0
- jne L1
- cmpl -4(%edi), %edx
- jecxz L1
- jne L0
-L1:
- leal -8(%edi), %eax
- cmovne %ecx, %eax
- pop %edi
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ScanMem64.Asm\r
+#\r
+# Abstract:\r
+#\r
+# ScanMem64 function\r
+#\r
+# Notes:\r
+#\r
+# The following BaseMemoryLib instances share the same version of this file:\r
+#\r
+# BaseMemoryLibRepStr\r
+# BaseMemoryLibMmx\r
+# BaseMemoryLibSse2\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EdkIIGlueBase.h>\r
+.globl ASM_PFX(InternalMemScanMem64)\r
+\r
+#------------------------------------------------------------------------------\r
+# CONST VOID *\r
+# EFIAPI\r
+# InternalMemScanMem64 (\r
+# IN CONST VOID *Buffer,\r
+# IN UINTN Length,\r
+# IN UINT64 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(InternalMemScanMem64):\r
+ push %edi\r
+ movl 12(%esp), %ecx\r
+ movl 16(%esp), %eax\r
+ movl 20(%esp), %edx\r
+ movl 8(%esp), %edi\r
+L0:\r
+ cmpl (%edi), %eax\r
+ leal 8(%edi), %edi\r
+ loopne L0\r
+ jne L1\r
+ cmpl -4(%edi), %edx\r
+ jecxz L1\r
+ jne L0\r
+L1:\r
+ leal -8(%edi), %eax\r
+ cmovne %ecx, %eax\r
+ pop %edi\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ScanMem8.Asm
-#
-# Abstract:
-#
-# ScanMem8 function
-#
-# Notes:
-#
-# The following BaseMemoryLib instances share the same version of this file:
-#
-# BaseMemoryLibRepStr
-# BaseMemoryLibMmx
-# BaseMemoryLibSse2
-#
-#------------------------------------------------------------------------------
-#include <EdkIIGlueBase.h>
-.globl ASM_PFX(InternalMemScanMem8)
-
-#------------------------------------------------------------------------------
-# CONST VOID *
-# EFIAPI
-# InternalMemScanMem8 (
-# IN CONST VOID *Buffer,
-# IN UINTN Length,
-# IN UINT8 Value
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(InternalMemScanMem8):
- push %edi
- movl 12(%esp), %ecx
- movl 8(%esp), %edi
- movb 16(%esp), %al
- repne scasb
- leal -1(%edi), %eax
- cmovnz %ecx, %eax
- pop %edi
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ScanMem8.Asm\r
+#\r
+# Abstract:\r
+#\r
+# ScanMem8 function\r
+#\r
+# Notes:\r
+#\r
+# The following BaseMemoryLib instances share the same version of this file:\r
+#\r
+# BaseMemoryLibRepStr\r
+# BaseMemoryLibMmx\r
+# BaseMemoryLibSse2\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EdkIIGlueBase.h>\r
+.globl ASM_PFX(InternalMemScanMem8)\r
+\r
+#------------------------------------------------------------------------------\r
+# CONST VOID *\r
+# EFIAPI\r
+# InternalMemScanMem8 (\r
+# IN CONST VOID *Buffer,\r
+# IN UINTN Length,\r
+# IN UINT8 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(InternalMemScanMem8):\r
+ push %edi\r
+ movl 12(%esp), %ecx\r
+ movl 8(%esp), %edi\r
+ movb 16(%esp), %al\r
+ repne scasb\r
+ leal -1(%edi), %eax\r
+ cmovnz %ecx, %eax\r
+ pop %edi\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# SetMem.Asm
-#
-# Abstract:
-#
-# SetMem function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-#include <EdkIIGlueBase.h>
- .386:
- .code:
-
-.globl ASM_PFX(InternalMemSetMem)
-
-#------------------------------------------------------------------------------
-# VOID *
-# InternalMemSetMem (
-# IN VOID *Buffer,
-# IN UINTN Count,
-# IN UINT8 Value
-# )
-#------------------------------------------------------------------------------
-ASM_PFX(InternalMemSetMem):
- push %edi
- movl 16(%esp),%eax
- movl 8(%esp),%edi
- movl 12(%esp),%ecx
- rep
- stosb
- movl 8(%esp),%eax
- pop %edi
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# SetMem.Asm\r
+#\r
+# Abstract:\r
+#\r
+# SetMem function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EdkIIGlueBase.h>\r
+ .386:\r
+ .code:\r
+\r
+.globl ASM_PFX(InternalMemSetMem)\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID *\r
+# InternalMemSetMem (\r
+# IN VOID *Buffer,\r
+# IN UINTN Count,\r
+# IN UINT8 Value\r
+# )\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(InternalMemSetMem):\r
+ push %edi\r
+ movl 16(%esp),%eax\r
+ movl 8(%esp),%edi\r
+ movl 12(%esp),%ecx\r
+ rep\r
+ stosb\r
+ movl 8(%esp),%eax\r
+ pop %edi\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# SetMem16.Asm
-#
-# Abstract:
-#
-# SetMem16 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-#include <EdkIIGlueBase.h>
-.globl ASM_PFX(InternalMemSetMem16)
-
-#------------------------------------------------------------------------------
-# VOID *
-# InternalMemSetMem16 (
-# IN VOID *Buffer,
-# IN UINTN Count,
-# IN UINT16 Value
-# )
-#------------------------------------------------------------------------------
-ASM_PFX(InternalMemSetMem16):
- push %edi
- movl 16(%esp), %eax
- movl 8(%esp), %edi
- movl 12(%esp), %ecx
- rep
- stosw
- movl 8(%esp), %eax
- pop %edi
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# SetMem16.Asm\r
+#\r
+# Abstract:\r
+#\r
+# SetMem16 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EdkIIGlueBase.h>\r
+.globl ASM_PFX(InternalMemSetMem16)\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID *\r
+# InternalMemSetMem16 (\r
+# IN VOID *Buffer,\r
+# IN UINTN Count,\r
+# IN UINT16 Value\r
+# )\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(InternalMemSetMem16):\r
+ push %edi\r
+ movl 16(%esp), %eax\r
+ movl 8(%esp), %edi\r
+ movl 12(%esp), %ecx\r
+ rep\r
+ stosw\r
+ movl 8(%esp), %eax\r
+ pop %edi\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# SetMem32.Asm
-#
-# Abstract:
-#
-# SetMem32 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-#include <EdkIIGlueBase.h>
-.globl ASM_PFX(InternalMemSetMem32)
-
-#------------------------------------------------------------------------------
-# VOID *
-# InternalMemSetMem32 (
-# IN VOID *Buffer,
-# IN UINTN Count,
-# IN UINT32 Value
-# )
-#------------------------------------------------------------------------------
-ASM_PFX(InternalMemSetMem32):
- push %edi
- movl 16(%esp),%eax
- movl 8(%esp),%edi
- movl 12(%esp),%ecx
- rep
- stosl
- movl 8(%esp),%eax
- pop %edi
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# SetMem32.Asm\r
+#\r
+# Abstract:\r
+#\r
+# SetMem32 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EdkIIGlueBase.h>\r
+.globl ASM_PFX(InternalMemSetMem32)\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID *\r
+# InternalMemSetMem32 (\r
+# IN VOID *Buffer,\r
+# IN UINTN Count,\r
+# IN UINT32 Value\r
+# )\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(InternalMemSetMem32):\r
+ push %edi\r
+ movl 16(%esp),%eax\r
+ movl 8(%esp),%edi\r
+ movl 12(%esp),%ecx\r
+ rep\r
+ stosl\r
+ movl 8(%esp),%eax\r
+ pop %edi\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# SetMem64.Asm
-#
-# Abstract:
-#
-# SetMem64 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-#include <EdkIIGlueBase.h>
-.globl ASM_PFX(InternalMemSetMem64)
-
-#------------------------------------------------------------------------------
-# VOID *
-# InternalMemSetMem64 (
-# IN VOID *Buffer,
-# IN UINTN Count,
-# IN UINT64 Value
-# )
-#------------------------------------------------------------------------------
-ASM_PFX(InternalMemSetMem64):
- push %edi
- movl 12(%esp), %ecx
- movl 16(%esp), %eax
- movl 20(%esp), %edx
- movl 8(%esp), %edi
-L0:
- mov %eax, -8(%edi, %ecx, 8)
- mov %edx, -4(%edi, %ecx, 8)
- loop L0
- movl %edi, %eax
- pop %edi
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# SetMem64.Asm\r
+#\r
+# Abstract:\r
+#\r
+# SetMem64 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EdkIIGlueBase.h>\r
+.globl ASM_PFX(InternalMemSetMem64)\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID *\r
+# InternalMemSetMem64 (\r
+# IN VOID *Buffer,\r
+# IN UINTN Count,\r
+# IN UINT64 Value\r
+# )\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(InternalMemSetMem64):\r
+ push %edi\r
+ movl 12(%esp), %ecx\r
+ movl 16(%esp), %eax\r
+ movl 20(%esp), %edx\r
+ movl 8(%esp), %edi\r
+L0:\r
+ mov %eax, -8(%edi, %ecx, 8)\r
+ mov %edx, -4(%edi, %ecx, 8)\r
+ loop L0\r
+ movl %edi, %eax\r
+ pop %edi\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ZeroMem.Asm
-#
-# Abstract:
-#
-# ZeroMem function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-#include <EdkIIGlueBase.h>
-.globl ASM_PFX(InternalMemZeroMem)
-
-#------------------------------------------------------------------------------
-# VOID *
-# InternalMemZeroMem (
-# IN VOID *Buffer,
-# IN UINTN Count
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(InternalMemZeroMem):
- push %edi
- xorl %eax,%eax
- movl 8(%esp),%edi
- movl 12(%esp),%ecx
- movl %ecx,%edx
- shrl $2,%ecx
- andl $3,%edx
- pushl %edi
- rep
- stosl
- movl %edx,%ecx
- rep
- stosb
- popl %eax
- pop %edi
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ZeroMem.Asm\r
+#\r
+# Abstract:\r
+#\r
+# ZeroMem function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EdkIIGlueBase.h>\r
+.globl ASM_PFX(InternalMemZeroMem)\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID *\r
+# InternalMemZeroMem (\r
+# IN VOID *Buffer,\r
+# IN UINTN Count\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(InternalMemZeroMem):\r
+ push %edi\r
+ xorl %eax,%eax\r
+ movl 8(%esp),%edi\r
+ movl 12(%esp),%ecx\r
+ movl %ecx,%edx\r
+ shrl $2,%ecx\r
+ andl $3,%edx\r
+ pushl %edi\r
+ rep\r
+ stosl\r
+ movl %edx,%ecx\r
+ rep\r
+ stosb\r
+ popl %eax\r
+ pop %edi\r
+ ret\r
-#
-# ConvertAsm.py: Automatically generated from CompareMem.asm
-#
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# CompareMem.S
-#
-# Abstract:
-#
-# CompareMem function
-#
-# Notes:
-#
-# The following BaseMemoryLib instances share the same version of this file:
-#
-# BaseMemoryLibRepStr
-# BaseMemoryLibMmx
-# BaseMemoryLibSse2
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# INTN
-# EFIAPI
-# InternalMemCompareMem (
-# IN CONST VOID *DestinationBuffer,
-# IN CONST VOID *SourceBuffer,
-# IN UINTN Length
-# );
-#------------------------------------------------------------------------------
-.intel_syntax
-.globl ASM_PFX(InternalMemCompareMem)
-ASM_PFX(InternalMemCompareMem):
- push rsi
- push rdi
- mov rsi, rcx
- mov rdi, rdx
- mov rcx, r8
- repe cmpsb
- movzx rax, byte ptr [rsi - 1]
- movzx rdx, byte ptr [rdi - 1]
- sub rax, rdx
- pop rdi
- pop rsi
- ret
-
+#\r
+# ConvertAsm.py: Automatically generated from CompareMem.asm\r
+#\r
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# CompareMem.S\r
+#\r
+# Abstract:\r
+#\r
+# CompareMem function\r
+#\r
+# Notes:\r
+#\r
+# The following BaseMemoryLib instances share the same version of this file:\r
+#\r
+# BaseMemoryLibRepStr\r
+# BaseMemoryLibMmx\r
+# BaseMemoryLibSse2\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# INTN\r
+# EFIAPI\r
+# InternalMemCompareMem (\r
+# IN CONST VOID *DestinationBuffer,\r
+# IN CONST VOID *SourceBuffer,\r
+# IN UINTN Length\r
+# );\r
+#------------------------------------------------------------------------------\r
+.intel_syntax\r
+.globl ASM_PFX(InternalMemCompareMem)\r
+ASM_PFX(InternalMemCompareMem):\r
+ push rsi\r
+ push rdi\r
+ mov rsi, rcx\r
+ mov rdi, rdx\r
+ mov rcx, r8\r
+ repe cmpsb\r
+ movzx rax, byte ptr [rsi - 1]\r
+ movzx rdx, byte ptr [rdi - 1]\r
+ sub rax, rdx\r
+ pop rdi\r
+ pop rsi\r
+ ret\r
+\r
-#
-# ConvertAsm.py: Automatically generated from CopyMem.asm
-#
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# CopyMem.S
-#
-# Abstract:
-#
-# CopyMem function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID *
-# EFIAPI
-# InternalMemCopyMem (
-# IN VOID *Destination,
-# IN VOID *Source,
-# IN UINTN Count
-# )
-#------------------------------------------------------------------------------
-.intel_syntax
-.globl ASM_PFX(InternalMemCopyMem)
-ASM_PFX(InternalMemCopyMem):
- push rsi
- push rdi
- mov rsi, rdx # rsi <- Source
- mov rdi, rcx # rdi <- Destination
- lea r9, [rsi + r8 - 1] # r9 <- End of Source
- cmp rsi, rdi
- mov rax, rdi # rax <- Destination as return value
- jae _InternalMemCopyMem_al_0000
- cmp r9, rdi
- jae _atSym_CopyBackward # Copy backward if overlapped
-_InternalMemCopyMem_al_0000:
- mov rcx, r8
- and r8, 7
- shr rcx, 3
- rep movsq # Copy as many Qwords as possible
- jmp _atSym_CopyBytes
-_atSym_CopyBackward:
- mov rsi, r9 # rsi <- End of Source
- lea rdi, [rdi + r8 - 1] # esi <- End of Destination
- std # set direction flag
-_atSym_CopyBytes:
- mov rcx, r8
- rep movsb # Copy bytes backward
- cld
- pop rdi
- pop rsi
- ret
-
+#\r
+# ConvertAsm.py: Automatically generated from CopyMem.asm\r
+#\r
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# CopyMem.S\r
+#\r
+# Abstract:\r
+#\r
+# CopyMem function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID *\r
+# EFIAPI\r
+# InternalMemCopyMem (\r
+# IN VOID *Destination,\r
+# IN VOID *Source,\r
+# IN UINTN Count\r
+# )\r
+#------------------------------------------------------------------------------\r
+.intel_syntax\r
+.globl ASM_PFX(InternalMemCopyMem)\r
+ASM_PFX(InternalMemCopyMem):\r
+ push rsi\r
+ push rdi\r
+ mov rsi, rdx # rsi <- Source\r
+ mov rdi, rcx # rdi <- Destination\r
+ lea r9, [rsi + r8 - 1] # r9 <- End of Source\r
+ cmp rsi, rdi\r
+ mov rax, rdi # rax <- Destination as return value\r
+ jae _InternalMemCopyMem_al_0000\r
+ cmp r9, rdi\r
+ jae _atSym_CopyBackward # Copy backward if overlapped\r
+_InternalMemCopyMem_al_0000:\r
+ mov rcx, r8\r
+ and r8, 7\r
+ shr rcx, 3\r
+ rep movsq # Copy as many Qwords as possible\r
+ jmp _atSym_CopyBytes\r
+_atSym_CopyBackward:\r
+ mov rsi, r9 # rsi <- End of Source\r
+ lea rdi, [rdi + r8 - 1] # esi <- End of Destination\r
+ std # set direction flag\r
+_atSym_CopyBytes:\r
+ mov rcx, r8\r
+ rep movsb # Copy bytes backward\r
+ cld\r
+ pop rdi\r
+ pop rsi\r
+ ret\r
+\r
-#
-# ConvertAsm.py: Automatically generated from ScanMem16.asm
-#
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ScanMem16.S
-#
-# Abstract:
-#
-# ScanMem16 function
-#
-# Notes:
-#
-# The following BaseMemoryLib instances share the same version of this file:
-#
-# BaseMemoryLibRepStr
-# BaseMemoryLibMmx
-# BaseMemoryLibSse2
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# CONST VOID *
-# EFIAPI
-# InternalMemScanMem16 (
-# IN CONST VOID *Buffer,
-# IN UINTN Length,
-# IN UINT16 Value
-# );
-#------------------------------------------------------------------------------
-.intel_syntax
-.globl ASM_PFX(InternalMemScanMem16)
-ASM_PFX(InternalMemScanMem16):
- push rdi
- mov rdi, rcx
- mov rax, r8
- mov rcx, rdx
- repne scasw
- lea rax, [rdi - 2]
- cmovnz rax, rcx
- pop rdi
- ret
-
+#\r
+# ConvertAsm.py: Automatically generated from ScanMem16.asm\r
+#\r
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ScanMem16.S\r
+#\r
+# Abstract:\r
+#\r
+# ScanMem16 function\r
+#\r
+# Notes:\r
+#\r
+# The following BaseMemoryLib instances share the same version of this file:\r
+#\r
+# BaseMemoryLibRepStr\r
+# BaseMemoryLibMmx\r
+# BaseMemoryLibSse2\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# CONST VOID *\r
+# EFIAPI\r
+# InternalMemScanMem16 (\r
+# IN CONST VOID *Buffer,\r
+# IN UINTN Length,\r
+# IN UINT16 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.intel_syntax\r
+.globl ASM_PFX(InternalMemScanMem16)\r
+ASM_PFX(InternalMemScanMem16):\r
+ push rdi\r
+ mov rdi, rcx\r
+ mov rax, r8\r
+ mov rcx, rdx\r
+ repne scasw\r
+ lea rax, [rdi - 2]\r
+ cmovnz rax, rcx\r
+ pop rdi\r
+ ret\r
+\r
-#
-# ConvertAsm.py: Automatically generated from ScanMem32.asm
-#
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ScanMem32.S
-#
-# Abstract:
-#
-# ScanMem32 function
-#
-# Notes:
-#
-# The following BaseMemoryLib instances share the same version of this file:
-#
-# BaseMemoryLibRepStr
-# BaseMemoryLibMmx
-# BaseMemoryLibSse2
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# CONST VOID *
-# EFIAPI
-# InternalMemScanMem32 (
-# IN CONST VOID *Buffer,
-# IN UINTN Length,
-# IN UINT32 Value
-# );
-#------------------------------------------------------------------------------
-.intel_syntax
-.globl ASM_PFX(InternalMemScanMem32)
-ASM_PFX(InternalMemScanMem32):
- push rdi
- mov rdi, rcx
- mov rax, r8
- mov rcx, rdx
- repne scasd
- lea rax, [rdi - 4]
- cmovnz rax, rcx
- pop rdi
- ret
-
+#\r
+# ConvertAsm.py: Automatically generated from ScanMem32.asm\r
+#\r
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ScanMem32.S\r
+#\r
+# Abstract:\r
+#\r
+# ScanMem32 function\r
+#\r
+# Notes:\r
+#\r
+# The following BaseMemoryLib instances share the same version of this file:\r
+#\r
+# BaseMemoryLibRepStr\r
+# BaseMemoryLibMmx\r
+# BaseMemoryLibSse2\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# CONST VOID *\r
+# EFIAPI\r
+# InternalMemScanMem32 (\r
+# IN CONST VOID *Buffer,\r
+# IN UINTN Length,\r
+# IN UINT32 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.intel_syntax\r
+.globl ASM_PFX(InternalMemScanMem32)\r
+ASM_PFX(InternalMemScanMem32):\r
+ push rdi\r
+ mov rdi, rcx\r
+ mov rax, r8\r
+ mov rcx, rdx\r
+ repne scasd\r
+ lea rax, [rdi - 4]\r
+ cmovnz rax, rcx\r
+ pop rdi\r
+ ret\r
+\r
-#
-# ConvertAsm.py: Automatically generated from ScanMem64.asm
-#
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ScanMem64.S
-#
-# Abstract:
-#
-# ScanMem64 function
-#
-# Notes:
-#
-# The following BaseMemoryLib instances share the same version of this file:
-#
-# BaseMemoryLibRepStr
-# BaseMemoryLibMmx
-# BaseMemoryLibSse2
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# CONST VOID *
-# EFIAPI
-# InternalMemScanMem64 (
-# IN CONST VOID *Buffer,
-# IN UINTN Length,
-# IN UINT64 Value
-# );
-#------------------------------------------------------------------------------
-.intel_syntax
-.globl ASM_PFX(InternalMemScanMem64)
-ASM_PFX(InternalMemScanMem64):
- push rdi
- mov rdi, rcx
- mov rax, r8
- mov rcx, rdx
- repne scasq
- lea rax, [rdi - 8]
- cmovnz rax, rcx
- pop rdi
- ret
-
+#\r
+# ConvertAsm.py: Automatically generated from ScanMem64.asm\r
+#\r
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ScanMem64.S\r
+#\r
+# Abstract:\r
+#\r
+# ScanMem64 function\r
+#\r
+# Notes:\r
+#\r
+# The following BaseMemoryLib instances share the same version of this file:\r
+#\r
+# BaseMemoryLibRepStr\r
+# BaseMemoryLibMmx\r
+# BaseMemoryLibSse2\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# CONST VOID *\r
+# EFIAPI\r
+# InternalMemScanMem64 (\r
+# IN CONST VOID *Buffer,\r
+# IN UINTN Length,\r
+# IN UINT64 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.intel_syntax\r
+.globl ASM_PFX(InternalMemScanMem64)\r
+ASM_PFX(InternalMemScanMem64):\r
+ push rdi\r
+ mov rdi, rcx\r
+ mov rax, r8\r
+ mov rcx, rdx\r
+ repne scasq\r
+ lea rax, [rdi - 8]\r
+ cmovnz rax, rcx\r
+ pop rdi\r
+ ret\r
+\r
-#
-# ConvertAsm.py: Automatically generated from ScanMem8.asm
-#
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ScanMem8.S
-#
-# Abstract:
-#
-# ScanMem8 function
-#
-# Notes:
-#
-# The following BaseMemoryLib instances share the same version of this file:
-#
-# BaseMemoryLibRepStr
-# BaseMemoryLibMmx
-# BaseMemoryLibSse2
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# CONST VOID *
-# EFIAPI
-# InternalMemScanMem8 (
-# IN CONST VOID *Buffer,
-# IN UINTN Length,
-# IN UINT8 Value
-# );
-#------------------------------------------------------------------------------
-.intel_syntax
-.globl ASM_PFX(InternalMemScanMem8)
-ASM_PFX(InternalMemScanMem8):
- push rdi
- mov rdi, rcx
- mov rcx, rdx
- mov rax, r8
- repne scasb
- lea rax, [rdi - 1]
- cmovnz rax, rcx # set rax to 0 if not found
- pop rdi
- ret
-
+#\r
+# ConvertAsm.py: Automatically generated from ScanMem8.asm\r
+#\r
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ScanMem8.S\r
+#\r
+# Abstract:\r
+#\r
+# ScanMem8 function\r
+#\r
+# Notes:\r
+#\r
+# The following BaseMemoryLib instances share the same version of this file:\r
+#\r
+# BaseMemoryLibRepStr\r
+# BaseMemoryLibMmx\r
+# BaseMemoryLibSse2\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# CONST VOID *\r
+# EFIAPI\r
+# InternalMemScanMem8 (\r
+# IN CONST VOID *Buffer,\r
+# IN UINTN Length,\r
+# IN UINT8 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.intel_syntax\r
+.globl ASM_PFX(InternalMemScanMem8)\r
+ASM_PFX(InternalMemScanMem8):\r
+ push rdi\r
+ mov rdi, rcx\r
+ mov rcx, rdx\r
+ mov rax, r8\r
+ repne scasb\r
+ lea rax, [rdi - 1]\r
+ cmovnz rax, rcx # set rax to 0 if not found\r
+ pop rdi\r
+ ret\r
+\r
-#
-# ConvertAsm.py: Automatically generated from SetMem.asm
-#
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# SetMem.S
-#
-# Abstract:
-#
-# SetMem function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID *
-# EFIAPI
-# InternalMemSetMem (
-# IN VOID *Buffer,
-# IN UINTN Count,
-# IN UINT8 Value
-# )
-#------------------------------------------------------------------------------
-.intel_syntax
-.globl ASM_PFX(InternalMemSetMem)
-ASM_PFX(InternalMemSetMem):
- push rdi
- mov rax, r8 # rax = Value
- mov rdi, rcx # rdi = Buffer
- xchg rcx, rdx # rcx = Count, rdx = Buffer
- rep stosb
- mov rax, rdx # rax = Buffer
- pop rdi
- ret
-
+#\r
+# ConvertAsm.py: Automatically generated from SetMem.asm\r
+#\r
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# SetMem.S\r
+#\r
+# Abstract:\r
+#\r
+# SetMem function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID *\r
+# EFIAPI\r
+# InternalMemSetMem (\r
+# IN VOID *Buffer,\r
+# IN UINTN Count,\r
+# IN UINT8 Value\r
+# )\r
+#------------------------------------------------------------------------------\r
+.intel_syntax\r
+.globl ASM_PFX(InternalMemSetMem)\r
+ASM_PFX(InternalMemSetMem):\r
+ push rdi\r
+ mov rax, r8 # rax = Value\r
+ mov rdi, rcx # rdi = Buffer\r
+ xchg rcx, rdx # rcx = Count, rdx = Buffer\r
+ rep stosb\r
+ mov rax, rdx # rax = Buffer\r
+ pop rdi\r
+ ret\r
+\r
-#
-# ConvertAsm.py: Automatically generated from SetMem16.asm
-#
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# SetMem16.S
-#
-# Abstract:
-#
-# SetMem16 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID *
-# EFIAPI
-# InternalMemSetMem16 (
-# IN VOID *Buffer,
-# IN UINTN Count,
-# IN UINT16 Value
-# )
-#------------------------------------------------------------------------------
-.intel_syntax
-.globl ASM_PFX(InternalMemSetMem16)
-ASM_PFX(InternalMemSetMem16):
- push rdi
- mov rdi, rcx
- mov rax, r8
- xchg rcx, rdx
- rep stosw
- mov rax, rdx
- pop rdi
- ret
-
+#\r
+# ConvertAsm.py: Automatically generated from SetMem16.asm\r
+#\r
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# SetMem16.S\r
+#\r
+# Abstract:\r
+#\r
+# SetMem16 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID *\r
+# EFIAPI\r
+# InternalMemSetMem16 (\r
+# IN VOID *Buffer,\r
+# IN UINTN Count,\r
+# IN UINT16 Value\r
+# )\r
+#------------------------------------------------------------------------------\r
+.intel_syntax\r
+.globl ASM_PFX(InternalMemSetMem16)\r
+ASM_PFX(InternalMemSetMem16):\r
+ push rdi\r
+ mov rdi, rcx\r
+ mov rax, r8\r
+ xchg rcx, rdx\r
+ rep stosw\r
+ mov rax, rdx\r
+ pop rdi\r
+ ret\r
+\r
-#
-# ConvertAsm.py: Automatically generated from SetMem32.asm
-#
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# SetMem32.S
-#
-# Abstract:
-#
-# SetMem32 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID *
-# EFIAPI
-# InternalMemSetMem32 (
-# IN VOID *Buffer,
-# IN UINTN Count,
-# IN UINT32 Value
-# );
-#------------------------------------------------------------------------------
-.intel_syntax
-.globl ASM_PFX(InternalMemSetMem32)
-ASM_PFX(InternalMemSetMem32):
- push rdi
- mov rdi, rcx
- mov rax, r8
- xchg rcx, rdx
- rep stosd
- mov rax, rdx
- pop rdi
- ret
-
+#\r
+# ConvertAsm.py: Automatically generated from SetMem32.asm\r
+#\r
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# SetMem32.S\r
+#\r
+# Abstract:\r
+#\r
+# SetMem32 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID *\r
+# EFIAPI\r
+# InternalMemSetMem32 (\r
+# IN VOID *Buffer,\r
+# IN UINTN Count,\r
+# IN UINT32 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+.intel_syntax\r
+.globl ASM_PFX(InternalMemSetMem32)\r
+ASM_PFX(InternalMemSetMem32):\r
+ push rdi\r
+ mov rdi, rcx\r
+ mov rax, r8\r
+ xchg rcx, rdx\r
+ rep stosd\r
+ mov rax, rdx\r
+ pop rdi\r
+ ret\r
+\r
-#
-# ConvertAsm.py: Automatically generated from SetMem64.asm
-#
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# SetMem64.S
-#
-# Abstract:
-#
-# SetMem64 function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID *
-# InternalMemSetMem64 (
-# IN VOID *Buffer,
-# IN UINTN Count,
-# IN UINT64 Value
-# )
-#------------------------------------------------------------------------------
-.intel_syntax
-.globl ASM_PFX(InternalMemSetMem64)
-ASM_PFX(InternalMemSetMem64):
- push rdi
- mov rdi, rcx
- mov rax, r8
- xchg rcx, rdx
- rep stosq
- mov rax, rdx
- pop rdi
- ret
-
+#\r
+# ConvertAsm.py: Automatically generated from SetMem64.asm\r
+#\r
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# SetMem64.S\r
+#\r
+# Abstract:\r
+#\r
+# SetMem64 function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID *\r
+# InternalMemSetMem64 (\r
+# IN VOID *Buffer,\r
+# IN UINTN Count,\r
+# IN UINT64 Value\r
+# )\r
+#------------------------------------------------------------------------------\r
+.intel_syntax\r
+.globl ASM_PFX(InternalMemSetMem64)\r
+ASM_PFX(InternalMemSetMem64):\r
+ push rdi\r
+ mov rdi, rcx\r
+ mov rax, r8\r
+ xchg rcx, rdx\r
+ rep stosq\r
+ mov rax, rdx\r
+ pop rdi\r
+ ret\r
+\r
-#
-# ConvertAsm.py: Automatically generated from ZeroMem.asm
-#
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ZeroMem.S
-#
-# Abstract:
-#
-# ZeroMem function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-
-#include <EdkIIGlueBase.h>
-#------------------------------------------------------------------------------
-# VOID *
-# InternalMemZeroMem (
-# IN VOID *Buffer,
-# IN UINTN Count
-# );
-#------------------------------------------------------------------------------
-.intel_syntax
-.globl ASM_PFX(InternalMemZeroMem)
-ASM_PFX(InternalMemZeroMem):
- push rdi
- push rcx
- xor rax, rax
- mov rdi, rcx
- mov rcx, rdx
- shr rcx, 3
- and rdx, 7
- rep stosq
- mov ecx, edx
- rep stosb
- pop rax
- pop rdi
- ret
-
+#\r
+# ConvertAsm.py: Automatically generated from ZeroMem.asm\r
+#\r
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ZeroMem.S\r
+#\r
+# Abstract:\r
+#\r
+# ZeroMem function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+#include <EdkIIGlueBase.h>\r
+#------------------------------------------------------------------------------\r
+# VOID *\r
+# InternalMemZeroMem (\r
+# IN VOID *Buffer,\r
+# IN UINTN Count\r
+# );\r
+#------------------------------------------------------------------------------\r
+.intel_syntax\r
+.globl ASM_PFX(InternalMemZeroMem)\r
+ASM_PFX(InternalMemZeroMem):\r
+ push rdi\r
+ push rcx\r
+ xor rax, rax\r
+ mov rdi, rcx\r
+ mov rcx, rdx\r
+ shr rcx, 3\r
+ and rdx, 7\r
+ rep stosq\r
+ mov ecx, edx\r
+ rep stosb\r
+ pop rax\r
+ pop rdi\r
+ ret\r
+\r
-#---------------------------------------------------------------------------
-#/*++
-#
-#Copyright (c) 2006, Intel Corporation
-#All rights reserved. This program and the accompanying materials
-#are licensed and made available under the terms and conditions of the BSD License
-#which accompanies this distribution. The full text of the license may be found at
-#http://opensource.org/licenses/bsd-license.php
-#
-#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#Module Name:
-#
-# DivU64x32.c
-#
-#Abstract:
-#
-# 64-bit division function for IA-32
-#
-#--*/
-
-#---------------------------------------------------------------------------
-#include "EfiBind.h" //For ASM_PFX
-#---------------------------------------------------------------------------
-
-#---------------------------------------------------------------------------
- .386:
- .code:
-
-#---------------------------------------------------------------------------
-
-.globl ASM_PFX(DivU64x32)
-
-#UINT64
-#DivU64x32 (
-# IN UINT64 Dividend,
-# IN UINTN Divisor,
-# OUT UINTN *Remainder OPTIONAL
-# )
-#/*++
-
-#Routine Description:
-
-# This routine allows a 64 bit value to be divided with a 32 bit value returns
-# 64bit result and the Remainder.
-#
-#Arguments:
-
-# Dividend - dividend
-# Divisor - divisor
-# Remainder - buffer for remainder
-#
-#Returns:
-
-# Dividend / Divisor
-# Remainder = Dividend mod Divisor
-#
-#N.B. only works for 31bit divisors!!
-#
-#--*/
-#---------------------------------------------------------------------------
-
-ASM_PFX(DivU64x32):
- pushl %ebp
- movl %esp, %ebp
- xorl %edx, %edx # Clear EDX
-
- movl 0xC(%ebp), %eax # Put high 32 bits of 64-bit dividend in EAX
- movl 0x10(%ebp), %ecx # Put 32 bits divisor in ECX
- divl %ecx # Dividend Divisor Quoitent...Remainder
- # 0:EAX / ECX = EAX EDX
-
- pushl %eax # Push quoitent in stack
-
- movl 8(%ebp), %eax # Put low 32 bits of 64-bit dividend in EAX
- divl %ecx # Leave the REMAINDER in EDX as High 32-bit of new dividend
- # Dividend Divisor Quoitent...Remainder
- # EDX:EAX / ECX = EAX EDX
-
- movl 0x14(%ebp), %ecx # Put &REMAINDER to ecx
-
- jecxz Label1 # If ecx == 0, no remainder exist, return with quoitent in EDX directly
- movl %edx, (%ecx) # Put EDX through REMAINDER pointer in ECX
-
-Label1:
- popl %edx # Pop High 32-bit QUOITENT to EDX
- popl %ebp
-
- ret
-
+#---------------------------------------------------------------------------\r
+#/*++\r
+#\r
+#Copyright (c) 2006, Intel Corporation \r
+#All rights reserved. This program and the accompanying materials \r
+#are licensed and made available under the terms and conditions of the BSD License \r
+#which accompanies this distribution. The full text of the license may be found at \r
+#http://opensource.org/licenses/bsd-license.php \r
+# \r
+#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#\r
+#Module Name:\r
+#\r
+# DivU64x32.c\r
+#\r
+#Abstract:\r
+#\r
+# 64-bit division function for IA-32\r
+#\r
+#--*/\r
+\r
+#---------------------------------------------------------------------------\r
+#include "EfiBind.h" //For ASM_PFX\r
+#---------------------------------------------------------------------------\r
+\r
+#---------------------------------------------------------------------------\r
+ .386: \r
+ .code: \r
+\r
+#---------------------------------------------------------------------------\r
+\r
+.globl ASM_PFX(DivU64x32)\r
+\r
+#UINT64\r
+#DivU64x32 (\r
+# IN UINT64 Dividend,\r
+# IN UINTN Divisor,\r
+# OUT UINTN *Remainder OPTIONAL\r
+# )\r
+#/*++\r
+\r
+#Routine Description:\r
+\r
+# This routine allows a 64 bit value to be divided with a 32 bit value returns \r
+# 64bit result and the Remainder.\r
+#\r
+#Arguments:\r
+\r
+# Dividend - dividend\r
+# Divisor - divisor\r
+# Remainder - buffer for remainder\r
+# \r
+#Returns:\r
+\r
+# Dividend / Divisor\r
+# Remainder = Dividend mod Divisor\r
+# \r
+#N.B. only works for 31bit divisors!!\r
+#\r
+#--*/\r
+#---------------------------------------------------------------------------\r
+\r
+ASM_PFX(DivU64x32):\r
+ pushl %ebp\r
+ movl %esp, %ebp\r
+ xorl %edx, %edx # Clear EDX\r
+\r
+ movl 0xC(%ebp), %eax # Put high 32 bits of 64-bit dividend in EAX\r
+ movl 0x10(%ebp), %ecx # Put 32 bits divisor in ECX\r
+ divl %ecx # Dividend Divisor Quoitent...Remainder\r
+ # 0:EAX / ECX = EAX EDX \r
+\r
+ pushl %eax # Push quoitent in stack\r
+\r
+ movl 8(%ebp), %eax # Put low 32 bits of 64-bit dividend in EAX \r
+ divl %ecx # Leave the REMAINDER in EDX as High 32-bit of new dividend\r
+ # Dividend Divisor Quoitent...Remainder \r
+ # EDX:EAX / ECX = EAX EDX \r
+\r
+ movl 0x14(%ebp), %ecx # Put &REMAINDER to ecx\r
+\r
+ jecxz Label1 # If ecx == 0, no remainder exist, return with quoitent in EDX directly \r
+ movl %edx, (%ecx) # Put EDX through REMAINDER pointer in ECX \r
+\r
+Label1: \r
+ popl %edx # Pop High 32-bit QUOITENT to EDX\r
+ popl %ebp\r
+\r
+ ret\r
+\r
-#/*++
-#
-#Copyright (c) 2006, Intel Corporation
-#All rights reserved. This program and the accompanying materials
-#are licensed and made available under the terms and conditions of the BSD License
-#which accompanies this distribution. The full text of the license may be found at
-#http://opensource.org/licenses/bsd-license.php
-#
-#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#Module Name:
-#
-# EfiCopyMem.c
-#
-#Abstract:
-#
-# This is the code that supports IA32-optimized CopyMem service
-#
-#--*/
-#include "EfiBind.h"
-#---------------------------------------------------------------------------
- .686:
- #.MODEL flat,C
- .mmx:
- .code:
-
-#---------------------------------------------------------------------------
-
-.globl ASM_PFX(EfiCommonLibCopyMem)
-
-#VOID
-#EfiCommonLibCopyMem (
-# IN VOID *Destination,
-# IN VOID *Source,
-# IN UINTN Count
-# )
-#/*++
-#
-#Routine Description:
-#
-# Copy Length bytes from Source to Destination.
-#
-#Arguments:
-#
-# Destination - Target of copy
-#
-# Source - Place to copy from
-#
-# Length - Number of bytes to copy
-#
-#Returns:
-#
-# None
-#
-#--*/
-ASM_PFX(EfiCommonLibCopyMem):
-
- pushl %ebp
- movl %esp, %ebp
- pushl %ecx # reserve space for Scratch Local variable UINT64 MmxSave
- pushl %ecx
- pushl %esi
- pushl %edi
-
- movl 0x10(%ebp), %ecx # Count
- movl 0xC(%ebp), %esi # Source
- movl 8(%ebp), %edi # Destination
-
-##First off, make sure we have no overlap. That is to say,
-## if (Source == Destination) => do nothing
-## if (Source + Count <= Destination) => regular copy
-## if (Destination + Count <= Source) => regular copy
-## otherwise, do a reverse copy
- movl %esi, %eax
- addl %ecx, %eax # Source + Count
- cmpl %edi, %eax
- jle _StartByteCopy
-
- movl %edi, %eax
- addl %ecx, %eax # Dest + Count
- cmpl %esi, %eax
- jle _StartByteCopy
-
- cmpl %edi, %esi
- je _CopyMemDone
- jl _CopyOverlapped # too bad -- overlaps
-
- # Pick up misaligned start bytes to get destination pointer 4-byte aligned
-_StartByteCopy:
- cmpl $0, %ecx
- je _CopyMemDone # Count == 0, all done
- movl %edi, %edx
- andb $3, %dl # check lower 2 bits of address
- testb %dl, %dl
- je _CopyBlocks # already aligned?
-
- # Copy a byte
- movb (%esi), %al # get byte from Source
- movb %al, (%edi) # write byte to Destination
- decl %ecx
- incl %edi
- incl %esi
- jmp _StartByteCopy # back to top of loop
-
-_CopyBlocks:
- # Compute how many 64-byte blocks we can clear
- movl %ecx, %eax # get Count in eax
- shrl $6, %eax # convert to 64-byte count
- shll $6, %eax # convert back to bytes
- subl %eax, %ecx # subtract from the original count
- shrl $6, %eax # and this is how many 64-byte blocks
-
- # If no 64-byte blocks, then skip
- cmpl $0, %eax
- je _CopyRemainingDWords
-
- # Save mm0 to UINT64 MmxSave
- movq %mm0, -8(%ebp)
-
-copymmx:
-
- movq %ds:(%esi), %mm0
- movq %mm0, %ds:(%edi)
- movq %ds:8(%esi), %mm0
- movq %mm0, %ds:8(%edi)
- movq %ds:16(%esi), %mm0
- movq %mm0, %ds:16(%edi)
- movq %ds:24(%esi), %mm0
- movq %mm0, %ds:24(%edi)
- movq %ds:32(%esi), %mm0
- movq %mm0, %ds:32(%edi)
- movq %ds:40(%esi), %mm0
- movq %mm0, %ds:40(%edi)
- movq %ds:48(%esi), %mm0
- movq %mm0, %ds:48(%edi)
- movq %ds:56(%esi), %mm0
- movq %mm0, %ds:56(%edi)
-
- addl $64, %edi
- addl $64, %esi
- decl %eax
- jnz copymmx
-
-# Restore mm0 from MmxSave
- movq -8(%ebp), %mm0
- emms # Exit MMX Instruction
-
- # Copy as many DWORDS as possible
-_CopyRemainingDWords:
- cmpl $4, %ecx
- jb _CopyRemainingBytes
-
- movl (%esi), %eax # get data from Source
- movl %eax, (%edi) # write byte to Destination
- subl $4, %ecx # decrement Count
- addl $4, %esi # advance Source pointer
- addl $4, %edi # advance Destination pointer
- jmp _CopyRemainingDWords # back to top
-
-_CopyRemainingBytes:
- cmpl $0, %ecx
- je _CopyMemDone
- movb (%esi), %al # get byte from Source
- movb %al, (%edi) # write byte to Destination
- decl %ecx
- incl %esi
- incl %edi # advance Destination pointer
- jmp _CopyRemainingBytes # back to top of loop
-
- #
- # We do this block if the source and destination buffers overlap. To
- # handle it, copy starting at the end of the source buffer and work
- # your way back. Since this is the atypical case, this code has not
- # been optimized, and thus simply copies bytes.
- #
-_CopyOverlapped:
-
- # Move the source and destination pointers to the end of the range
- addl %ecx, %esi # Source + Count
- decl %esi
- addl %ecx, %edi # Dest + Count
- decl %edi
-
-_CopyOverlappedLoop:
- cmpl $0, %ecx
- je _CopyMemDone
- movb (%esi), %al # get byte from Source
- movb %al, (%edi) # write byte to Destination
- decl %ecx
- decl %esi
- decl %edi
- jmp _CopyOverlappedLoop # back to top of loop
-
-_CopyMemDone:
-
- popl %edi
- popl %esi
- leave
- ret
-#EfiCommonLibCopyMem ENDP
-
+#/*++\r
+#\r
+#Copyright (c) 2006, Intel Corporation \r
+#All rights reserved. This program and the accompanying materials \r
+#are licensed and made available under the terms and conditions of the BSD License \r
+#which accompanies this distribution. The full text of the license may be found at \r
+#http://opensource.org/licenses/bsd-license.php \r
+# \r
+#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#\r
+#Module Name:\r
+#\r
+# EfiCopyMem.c\r
+#\r
+#Abstract:\r
+#\r
+# This is the code that supports IA32-optimized CopyMem service\r
+#\r
+#--*/\r
+#include "EfiBind.h"\r
+#---------------------------------------------------------------------------\r
+ .686: \r
+ #.MODEL flat,C\r
+ .mmx: \r
+ .code: \r
+\r
+#---------------------------------------------------------------------------\r
+\r
+.globl ASM_PFX(EfiCommonLibCopyMem)\r
+\r
+#VOID\r
+#EfiCommonLibCopyMem (\r
+# IN VOID *Destination,\r
+# IN VOID *Source,\r
+# IN UINTN Count\r
+# )\r
+#/*++\r
+#\r
+#Routine Description:\r
+#\r
+# Copy Length bytes from Source to Destination.\r
+#\r
+#Arguments:\r
+#\r
+# Destination - Target of copy\r
+#\r
+# Source - Place to copy from\r
+#\r
+# Length - Number of bytes to copy\r
+#\r
+#Returns:\r
+#\r
+# None\r
+#\r
+#--*/\r
+ASM_PFX(EfiCommonLibCopyMem):\r
+\r
+ pushl %ebp\r
+ movl %esp, %ebp\r
+ pushl %ecx # reserve space for Scratch Local variable UINT64 MmxSave\r
+ pushl %ecx\r
+ pushl %esi\r
+ pushl %edi\r
+\r
+ movl 0x10(%ebp), %ecx # Count\r
+ movl 0xC(%ebp), %esi # Source\r
+ movl 8(%ebp), %edi # Destination\r
+\r
+##First off, make sure we have no overlap. That is to say,\r
+## if (Source == Destination) => do nothing\r
+## if (Source + Count <= Destination) => regular copy\r
+## if (Destination + Count <= Source) => regular copy\r
+## otherwise, do a reverse copy\r
+ movl %esi, %eax\r
+ addl %ecx, %eax # Source + Count\r
+ cmpl %edi, %eax\r
+ jle _StartByteCopy\r
+\r
+ movl %edi, %eax\r
+ addl %ecx, %eax # Dest + Count\r
+ cmpl %esi, %eax\r
+ jle _StartByteCopy\r
+\r
+ cmpl %edi, %esi\r
+ je _CopyMemDone\r
+ jl _CopyOverlapped # too bad -- overlaps\r
+\r
+ # Pick up misaligned start bytes to get destination pointer 4-byte aligned\r
+_StartByteCopy: \r
+ cmpl $0, %ecx\r
+ je _CopyMemDone # Count == 0, all done\r
+ movl %edi, %edx\r
+ andb $3, %dl # check lower 2 bits of address\r
+ testb %dl, %dl\r
+ je _CopyBlocks # already aligned?\r
+\r
+ # Copy a byte\r
+ movb (%esi), %al # get byte from Source\r
+ movb %al, (%edi) # write byte to Destination\r
+ decl %ecx\r
+ incl %edi\r
+ incl %esi\r
+ jmp _StartByteCopy # back to top of loop\r
+\r
+_CopyBlocks: \r
+ # Compute how many 64-byte blocks we can clear \r
+ movl %ecx, %eax # get Count in eax\r
+ shrl $6, %eax # convert to 64-byte count\r
+ shll $6, %eax # convert back to bytes\r
+ subl %eax, %ecx # subtract from the original count\r
+ shrl $6, %eax # and this is how many 64-byte blocks\r
+\r
+ # If no 64-byte blocks, then skip \r
+ cmpl $0, %eax\r
+ je _CopyRemainingDWords\r
+\r
+ # Save mm0 to UINT64 MmxSave\r
+ movq %mm0, -8(%ebp)\r
+\r
+copymmx: \r
+\r
+ movq %ds:(%esi), %mm0\r
+ movq %mm0, %ds:(%edi)\r
+ movq %ds:8(%esi), %mm0\r
+ movq %mm0, %ds:8(%edi)\r
+ movq %ds:16(%esi), %mm0\r
+ movq %mm0, %ds:16(%edi)\r
+ movq %ds:24(%esi), %mm0\r
+ movq %mm0, %ds:24(%edi)\r
+ movq %ds:32(%esi), %mm0\r
+ movq %mm0, %ds:32(%edi)\r
+ movq %ds:40(%esi), %mm0\r
+ movq %mm0, %ds:40(%edi)\r
+ movq %ds:48(%esi), %mm0\r
+ movq %mm0, %ds:48(%edi)\r
+ movq %ds:56(%esi), %mm0\r
+ movq %mm0, %ds:56(%edi)\r
+\r
+ addl $64, %edi\r
+ addl $64, %esi\r
+ decl %eax\r
+ jnz copymmx\r
+\r
+# Restore mm0 from MmxSave\r
+ movq -8(%ebp), %mm0\r
+ emms # Exit MMX Instruction\r
+\r
+ # Copy as many DWORDS as possible\r
+_CopyRemainingDWords: \r
+ cmpl $4, %ecx\r
+ jb _CopyRemainingBytes\r
+\r
+ movl (%esi), %eax # get data from Source\r
+ movl %eax, (%edi) # write byte to Destination\r
+ subl $4, %ecx # decrement Count\r
+ addl $4, %esi # advance Source pointer\r
+ addl $4, %edi # advance Destination pointer\r
+ jmp _CopyRemainingDWords # back to top\r
+\r
+_CopyRemainingBytes: \r
+ cmpl $0, %ecx\r
+ je _CopyMemDone\r
+ movb (%esi), %al # get byte from Source\r
+ movb %al, (%edi) # write byte to Destination\r
+ decl %ecx\r
+ incl %esi\r
+ incl %edi # advance Destination pointer\r
+ jmp _CopyRemainingBytes # back to top of loop\r
+\r
+ #\r
+ # We do this block if the source and destination buffers overlap. To\r
+ # handle it, copy starting at the end of the source buffer and work\r
+ # your way back. Since this is the atypical case, this code has not\r
+ # been optimized, and thus simply copies bytes.\r
+ #\r
+_CopyOverlapped: \r
+\r
+ # Move the source and destination pointers to the end of the range\r
+ addl %ecx, %esi # Source + Count\r
+ decl %esi\r
+ addl %ecx, %edi # Dest + Count\r
+ decl %edi\r
+\r
+_CopyOverlappedLoop: \r
+ cmpl $0, %ecx\r
+ je _CopyMemDone\r
+ movb (%esi), %al # get byte from Source\r
+ movb %al, (%edi) # write byte to Destination\r
+ decl %ecx\r
+ decl %esi\r
+ decl %edi\r
+ jmp _CopyOverlappedLoop # back to top of loop\r
+\r
+_CopyMemDone: \r
+\r
+ popl %edi\r
+ popl %esi\r
+ leave\r
+ ret\r
+#EfiCommonLibCopyMem ENDP\r
+\r
-#/*++
-#
-#Copyright (c) 2006, Intel Corporation
-#All rights reserved. This program and the accompanying materials
-#are licensed and made available under the terms and conditions of the BSD License
-#which accompanies this distribution. The full text of the license may be found at
-#http://opensource.org/licenses/bsd-license.php
-#
-#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#Module Name:
-#
-# EfiSetMem.asm
-#
-#Abstract:
-#
-# This is the code that supports IA32-optimized SetMem service
-#
-#--*/
-#include "EfiBind.h"
-#---------------------------------------------------------------------------
- .686:
- #.MODEL flat,C
- .mmx:
- .code:
-
-#---------------------------------------------------------------------------
-.globl ASM_PFX(EfiCommonLibSetMem)
-
-#VOID
-#EfiCommonLibSetMem (
-# IN VOID *Buffer,
-# IN UINTN Count,
-# IN UINT8 Value
-# )
-#/*++
-#
-#Input: VOID *Buffer - Pointer to buffer to write
-# UINTN Count - Number of bytes to write
-# UINT8 Value - Value to write
-#
-#Output: None.
-#
-#Saves:
-#
-#Modifies:
-#
-#Description: This function is an optimized set-memory function.
-#
-#Notes: This function tries to set memory 8 bytes at a time. As a result,
-# it first picks up any misaligned bytes, then words, before getting
-# in the main loop that does the 8-byte clears.
-#
-#--*/
-ASM_PFX(EfiCommonLibSetMem):
-
- pushl %ebp
- movl %esp, %ebp
- subl $0x10, %esp # Reserve space for local variable UINT64 QWordValue @[ebp - 10H] & UINT64 MmxSave @[ebp - 18H]
- pushl %ebx
- pushl %edi
-
- movl 0xC(%ebp), %edx # Count
- testl %edx, %edx
- je _SetMemDone
-
- pushl %ebx
-
- movl 8(%ebp), %eax # Buffer
- movb 0x10(%ebp), %bl # Value
- movl %eax, %edi
- movb %bl, %bh
-
- cmpl $256, %edx
- jb _SetRemindingByte
-
- andb $0x7, %al
- testb %al, %al
- je _SetBlock
-
- movl %edi, %eax
- shrl $3, %eax
- incl %eax
- shll $3, %eax
- subl %edi, %eax
- cmpl %edx, %eax
- jnb _SetRemindingByte
-
- subl %eax, %edx
- movl %eax, %ecx
-
- movb %bl, %al
- rep
- stosb
-
-_SetBlock:
- movl %edx, %eax
- shrl $6, %eax
- testl %eax, %eax
- je _SetRemindingByte
-
- shll $6, %eax
- subl %eax, %edx
- shrl $6, %eax
-
- movw %bx, -0x10(%ebp) # QWordValue[0]
- movw %bx, -0x10+2(%ebp) # QWordValue[2]
- movw %bx, -0x10+4(%ebp) # QWordValue[4]
- movw %bx, -0x10+6(%ebp) # QWordValue[6]
-
-
- movq %mm0, -8(%ebp) # Save mm0 to MmxSave
- movq -0x10(%ebp), %mm0 # Load QWordValue to mm0
-
-_B:
- movq %mm0, %ds:(%edi)
- movq %mm0, %ds:8(%edi)
- movq %mm0, %ds:16(%edi)
- movq %mm0, %ds:24(%edi)
- movq %mm0, %ds:32(%edi)
- movq %mm0, %ds:40(%edi)
- movq %mm0, %ds:48(%edi)
- movq %mm0, %ds:56(%edi)
- addl $64, %edi
- decl %eax
- jnz _B
-
-# Restore mm0
- movq -8(%ebp), %mm0 # Restore MmxSave to mm0
- emms # Exit MMX Instruction
-
-_SetRemindingByte:
- movl %edx, %ecx
-
- movl %ebx, %eax
- shll $16, %eax
- movw %bx, %ax
- shrl $2, %ecx
- rep
- stosl
-
- movl %edx, %ecx
- andl $3, %ecx
- rep
- stosb
-
- popl %ebx
-
-_SetMemDone:
-
- popl %edi
- popl %ebx
- leave
- ret
-
-#EfiCommonLibSetMem ENDP
-
+#/*++\r
+#\r
+#Copyright (c) 2006, Intel Corporation \r
+#All rights reserved. This program and the accompanying materials \r
+#are licensed and made available under the terms and conditions of the BSD License \r
+#which accompanies this distribution. The full text of the license may be found at \r
+#http://opensource.org/licenses/bsd-license.php \r
+# \r
+#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#\r
+#Module Name:\r
+#\r
+# EfiSetMem.asm\r
+#\r
+#Abstract:\r
+#\r
+# This is the code that supports IA32-optimized SetMem service\r
+#\r
+#--*/\r
+#include "EfiBind.h"\r
+#---------------------------------------------------------------------------\r
+ .686: \r
+ #.MODEL flat,C\r
+ .mmx: \r
+ .code: \r
+\r
+#---------------------------------------------------------------------------\r
+.globl ASM_PFX(EfiCommonLibSetMem)\r
+\r
+#VOID\r
+#EfiCommonLibSetMem (\r
+# IN VOID *Buffer,\r
+# IN UINTN Count,\r
+# IN UINT8 Value\r
+# )\r
+#/*++\r
+#\r
+#Input: VOID *Buffer - Pointer to buffer to write\r
+# UINTN Count - Number of bytes to write\r
+# UINT8 Value - Value to write\r
+#\r
+#Output: None.\r
+#\r
+#Saves:\r
+#\r
+#Modifies:\r
+#\r
+#Description: This function is an optimized set-memory function.\r
+#\r
+#Notes: This function tries to set memory 8 bytes at a time. As a result, \r
+# it first picks up any misaligned bytes, then words, before getting \r
+# in the main loop that does the 8-byte clears.\r
+#\r
+#--*/\r
+ASM_PFX(EfiCommonLibSetMem):\r
+\r
+ pushl %ebp\r
+ movl %esp, %ebp\r
+ subl $0x10, %esp # Reserve space for local variable UINT64 QWordValue @[ebp - 10H] & UINT64 MmxSave @[ebp - 18H]\r
+ pushl %ebx\r
+ pushl %edi\r
+\r
+ movl 0xC(%ebp), %edx # Count\r
+ testl %edx, %edx\r
+ je _SetMemDone\r
+\r
+ pushl %ebx\r
+\r
+ movl 8(%ebp), %eax # Buffer\r
+ movb 0x10(%ebp), %bl # Value\r
+ movl %eax, %edi\r
+ movb %bl, %bh\r
+\r
+ cmpl $256, %edx\r
+ jb _SetRemindingByte\r
+\r
+ andb $0x7, %al\r
+ testb %al, %al\r
+ je _SetBlock\r
+\r
+ movl %edi, %eax\r
+ shrl $3, %eax\r
+ incl %eax\r
+ shll $3, %eax\r
+ subl %edi, %eax\r
+ cmpl %edx, %eax\r
+ jnb _SetRemindingByte\r
+\r
+ subl %eax, %edx\r
+ movl %eax, %ecx\r
+\r
+ movb %bl, %al\r
+ rep\r
+ stosb\r
+\r
+_SetBlock: \r
+ movl %edx, %eax\r
+ shrl $6, %eax\r
+ testl %eax, %eax\r
+ je _SetRemindingByte\r
+\r
+ shll $6, %eax\r
+ subl %eax, %edx\r
+ shrl $6, %eax\r
+\r
+ movw %bx, -0x10(%ebp) # QWordValue[0]\r
+ movw %bx, -0x10+2(%ebp) # QWordValue[2]\r
+ movw %bx, -0x10+4(%ebp) # QWordValue[4]\r
+ movw %bx, -0x10+6(%ebp) # QWordValue[6]\r
+\r
+\r
+ movq %mm0, -8(%ebp) # Save mm0 to MmxSave\r
+ movq -0x10(%ebp), %mm0 # Load QWordValue to mm0\r
+\r
+_B: \r
+ movq %mm0, %ds:(%edi)\r
+ movq %mm0, %ds:8(%edi)\r
+ movq %mm0, %ds:16(%edi)\r
+ movq %mm0, %ds:24(%edi)\r
+ movq %mm0, %ds:32(%edi)\r
+ movq %mm0, %ds:40(%edi)\r
+ movq %mm0, %ds:48(%edi)\r
+ movq %mm0, %ds:56(%edi)\r
+ addl $64, %edi\r
+ decl %eax\r
+ jnz _B\r
+\r
+# Restore mm0\r
+ movq -8(%ebp), %mm0 # Restore MmxSave to mm0\r
+ emms # Exit MMX Instruction\r
+\r
+_SetRemindingByte: \r
+ movl %edx, %ecx\r
+\r
+ movl %ebx, %eax\r
+ shll $16, %eax\r
+ movw %bx, %ax\r
+ shrl $2, %ecx\r
+ rep\r
+ stosl\r
+\r
+ movl %edx, %ecx\r
+ andl $3, %ecx\r
+ rep\r
+ stosb\r
+\r
+ popl %ebx\r
+\r
+_SetMemDone: \r
+\r
+ popl %edi\r
+ popl %ebx\r
+ leave\r
+ ret\r
+\r
+#EfiCommonLibSetMem ENDP\r
+\r
-#/*++
-#
-#Copyright (c) 2006, Intel Corporation
-#All rights reserved. This program and the accompanying materials
-#are licensed and made available under the terms and conditions of the BSD License
-#which accompanies this distribution. The full text of the license may be found at
-#http://opensource.org/licenses/bsd-license.php
-#
-#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#Module Name:
-#
-# EfiZeroMem.c
-#
-#Abstract:
-#
-# This is the code that supports IA32-optimized ZeroMem service
-#
-#--*/
-#include "EfiBind.h"
-#---------------------------------------------------------------------------
- .686:
- #.MODEL flat,C
- .mmx:
- .code:
-
-#---------------------------------------------------------------------------
-.globl ASM_PFX(EfiCommonLibZeroMem)
-#VOID
-#EfiCommonLibZeroMem (
-# IN VOID *Buffer,
-# IN UINTN Count
-# )
-#/*++
-#
-#Input: VOID *Buffer - Pointer to buffer to clear
-# UINTN Count - Number of bytes to clear
-#
-#Output: None.
-#
-#Saves:
-#
-#Modifies:
-#
-#Description: This function is an optimized zero-memory function.
-#
-#Notes: This function tries to zero memory 8 bytes at a time. As a result,
-# it first picks up any misaligned bytes, then words, before getting
-# in the main loop that does the 8-byte clears.
-#
-#--*/
-ASM_PFX(EfiCommonLibZeroMem):
-# UINT64 MmxSave;
- pushl %ebp
- movl %esp, %ebp
- pushl %ecx # Reserve space for local variable MmxSave
- pushl %ecx
- pushl %edi
-
- movl 0xC(%ebp), %ecx # Count
- movl 8(%ebp), %edi # Buffer
-
- # Pick up misaligned start bytes (get pointer 4-byte aligned)
-_StartByteZero:
- movl %edi, %eax
- andb $3, %al # check lower 2 bits of address
- testb %al, %al
- je _ZeroBlocks # already aligned?
- cmpl $0, %ecx
- je _ZeroMemDone
-
- # Clear the byte memory location
- movb $0, (%edi)
- incl %edi
-
- # Decrement our count
- decl %ecx
- jmp _StartByteZero # back to top of loop
-
-_ZeroBlocks:
-
- # Compute how many 64-byte blocks we can clear
- movl %ecx, %edx
- shrl $6, %ecx # convert to 64-byte count
- shll $6, %ecx # convert back to bytes
- subl %ecx, %edx # subtract from the original count
- shrl $6, %ecx # and this is how many 64-byte blocks
-
- # If no 64-byte blocks, then skip
- cmpl $0, %ecx
- je _ZeroRemaining
-
- # Save mm0
- movq %mm0, -8(%ebp) # Save mm0 to MmxSave
-
- pxor %mm0, %mm0 # Clear mm0
-
-_B:
- movq %mm0, %ds:(%edi)
- movq %mm0, %ds:8(%edi)
- movq %mm0, %ds:16(%edi)
- movq %mm0, %ds:24(%edi)
- movq %mm0, %ds:32(%edi)
- movq %mm0, %ds:40(%edi)
- movq %mm0, %ds:48(%edi)
- movq %mm0, %ds:56(%edi)
-
- addl $64, %edi
- decl %ecx
- jnz _B
-
-# Restore mm0
- movq -8(%ebp), %mm0 # Restore mm0 from MmxSave
- emms # Exit MMX Instruction
-
-_ZeroRemaining:
- # Zero out as many DWORDS as possible
- movl %edx, %ecx
- shrl $2, %ecx
- xorl %eax, %eax
-
- rep
- stosl
-
- # Zero out remaining as bytes
- movl %edx, %ecx
- andl $03, %ecx
-
- rep
- stosb
-
-_ZeroMemDone:
-
- popl %edi
- leave
- ret
-#EfiCommonLibZeroMem ENDP
-
+#/*++\r
+#\r
+#Copyright (c) 2006, Intel Corporation \r
+#All rights reserved. This program and the accompanying materials \r
+#are licensed and made available under the terms and conditions of the BSD License \r
+#which accompanies this distribution. The full text of the license may be found at \r
+#http://opensource.org/licenses/bsd-license.php \r
+# \r
+#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#\r
+#Module Name:\r
+#\r
+# EfiZeroMem.c\r
+#\r
+#Abstract:\r
+#\r
+# This is the code that supports IA32-optimized ZeroMem service\r
+#\r
+#--*/\r
+#include "EfiBind.h"\r
+#---------------------------------------------------------------------------\r
+ .686: \r
+ #.MODEL flat,C\r
+ .mmx: \r
+ .code: \r
+\r
+#---------------------------------------------------------------------------\r
+.globl ASM_PFX(EfiCommonLibZeroMem)\r
+#VOID\r
+#EfiCommonLibZeroMem (\r
+# IN VOID *Buffer,\r
+# IN UINTN Count\r
+# )\r
+#/*++\r
+#\r
+#Input: VOID *Buffer - Pointer to buffer to clear\r
+# UINTN Count - Number of bytes to clear\r
+#\r
+#Output: None.\r
+#\r
+#Saves:\r
+#\r
+#Modifies:\r
+#\r
+#Description: This function is an optimized zero-memory function.\r
+#\r
+#Notes: This function tries to zero memory 8 bytes at a time. As a result, \r
+# it first picks up any misaligned bytes, then words, before getting \r
+# in the main loop that does the 8-byte clears.\r
+#\r
+#--*/\r
+ASM_PFX(EfiCommonLibZeroMem):\r
+# UINT64 MmxSave;\r
+ pushl %ebp\r
+ movl %esp, %ebp\r
+ pushl %ecx # Reserve space for local variable MmxSave\r
+ pushl %ecx\r
+ pushl %edi\r
+\r
+ movl 0xC(%ebp), %ecx # Count\r
+ movl 8(%ebp), %edi # Buffer\r
+\r
+ # Pick up misaligned start bytes (get pointer 4-byte aligned)\r
+_StartByteZero: \r
+ movl %edi, %eax\r
+ andb $3, %al # check lower 2 bits of address\r
+ testb %al, %al\r
+ je _ZeroBlocks # already aligned?\r
+ cmpl $0, %ecx\r
+ je _ZeroMemDone\r
+\r
+ # Clear the byte memory location\r
+ movb $0, (%edi)\r
+ incl %edi\r
+\r
+ # Decrement our count\r
+ decl %ecx\r
+ jmp _StartByteZero # back to top of loop\r
+\r
+_ZeroBlocks: \r
+\r
+ # Compute how many 64-byte blocks we can clear \r
+ movl %ecx, %edx\r
+ shrl $6, %ecx # convert to 64-byte count\r
+ shll $6, %ecx # convert back to bytes\r
+ subl %ecx, %edx # subtract from the original count\r
+ shrl $6, %ecx # and this is how many 64-byte blocks\r
+\r
+ # If no 64-byte blocks, then skip \r
+ cmpl $0, %ecx\r
+ je _ZeroRemaining\r
+\r
+ # Save mm0\r
+ movq %mm0, -8(%ebp) # Save mm0 to MmxSave\r
+\r
+ pxor %mm0, %mm0 # Clear mm0\r
+\r
+_B: \r
+ movq %mm0, %ds:(%edi)\r
+ movq %mm0, %ds:8(%edi)\r
+ movq %mm0, %ds:16(%edi)\r
+ movq %mm0, %ds:24(%edi)\r
+ movq %mm0, %ds:32(%edi)\r
+ movq %mm0, %ds:40(%edi)\r
+ movq %mm0, %ds:48(%edi)\r
+ movq %mm0, %ds:56(%edi)\r
+\r
+ addl $64, %edi\r
+ decl %ecx\r
+ jnz _B\r
+\r
+# Restore mm0\r
+ movq -8(%ebp), %mm0 # Restore mm0 from MmxSave\r
+ emms # Exit MMX Instruction\r
+\r
+_ZeroRemaining: \r
+ # Zero out as many DWORDS as possible\r
+ movl %edx, %ecx\r
+ shrl $2, %ecx\r
+ xorl %eax, %eax\r
+\r
+ rep\r
+ stosl\r
+\r
+ # Zero out remaining as bytes\r
+ movl %edx, %ecx\r
+ andl $03, %ecx\r
+\r
+ rep\r
+ stosb\r
+\r
+_ZeroMemDone: \r
+\r
+ popl %edi\r
+ leave\r
+ ret\r
+#EfiCommonLibZeroMem ENDP\r
+\r
-#/*++
-#
-#Copyright (c) 2006, Intel Corporation
-#All rights reserved. This program and the accompanying materials
-#are licensed and made available under the terms and conditions of the BSD License
-#which accompanies this distribution. The full text of the license may be found at
-#http://opensource.org/licenses/bsd-license.php
-#
-#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#Module Name:
-#
-# GetPowerOfTwo.c
-#
-#Abstract:
-#
-# Calculates the largest integer that is both
-# a power of two and less than Input
-#
-#--*/
-#include "EfiBind.h"
-#---------------------------------------------------------------------------
- .686:
- #.MODEL flat,C
- .code:
-
-#---------------------------------------------------------------------------
-.globl ASM_PFX(GetPowerOfTwo)
-#UINT64
-#GetPowerOfTwo (
-# IN UINT64 Input
-# )
-#/*++
-#
-#Routine Description:
-#
-# Calculates the largest integer that is both
-# a power of two and less than Input
-#
-#Arguments:
-#
-# Input - value to calculate power of two
-#
-#Returns:
-#
-# the largest integer that is both a power of
-# two and less than Input
-#
-#--*/
-ASM_PFX(GetPowerOfTwo):
- xorl %eax, %eax
- movl %eax, %edx
- movl 8(%esp), %ecx # dword ptr Input[4]
- jecxz _F
- bsrl %ecx, %ecx
- btsl %ecx, %edx
- jmp _Exit
-_F:
- movl 4(%esp), %ecx # dword ptr Input[0]
- jecxz _Exit
- bsrl %ecx, %ecx
- btsl %ecx, %eax
-_Exit:
-
- ret
-#GetPowerOfTwo ENDP
-
+#/*++\r
+#\r
+#Copyright (c) 2006, Intel Corporation \r
+#All rights reserved. This program and the accompanying materials \r
+#are licensed and made available under the terms and conditions of the BSD License \r
+#which accompanies this distribution. The full text of the license may be found at \r
+#http://opensource.org/licenses/bsd-license.php \r
+# \r
+#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#\r
+#Module Name:\r
+#\r
+# GetPowerOfTwo.c\r
+#\r
+#Abstract:\r
+#\r
+# Calculates the largest integer that is both \r
+# a power of two and less than Input\r
+#\r
+#--*/\r
+#include "EfiBind.h"\r
+#---------------------------------------------------------------------------\r
+ .686: \r
+ #.MODEL flat,C\r
+ .code: \r
+\r
+#---------------------------------------------------------------------------\r
+.globl ASM_PFX(GetPowerOfTwo)\r
+#UINT64\r
+#GetPowerOfTwo (\r
+# IN UINT64 Input\r
+# )\r
+#/*++\r
+#\r
+#Routine Description:\r
+#\r
+# Calculates the largest integer that is both \r
+# a power of two and less than Input\r
+#\r
+#Arguments:\r
+#\r
+# Input - value to calculate power of two\r
+#\r
+#Returns:\r
+#\r
+# the largest integer that is both a power of \r
+# two and less than Input\r
+#\r
+#--*/\r
+ASM_PFX(GetPowerOfTwo):\r
+ xorl %eax, %eax\r
+ movl %eax, %edx\r
+ movl 8(%esp), %ecx # dword ptr Input[4]\r
+ jecxz _F\r
+ bsrl %ecx, %ecx\r
+ btsl %ecx, %edx\r
+ jmp _Exit\r
+_F: \r
+ movl 4(%esp), %ecx # dword ptr Input[0]\r
+ jecxz _Exit\r
+ bsrl %ecx, %ecx\r
+ btsl %ecx, %eax\r
+_Exit: \r
+\r
+ ret\r
+#GetPowerOfTwo ENDP\r
+\r
-#/*++
-#
-#Copyright (c) 2006, Intel Corporation
-#All rights reserved. This program and the accompanying materials
-#are licensed and made available under the terms and conditions of the BSD License
-#which accompanies this distribution. The full text of the license may be found at
-#http://opensource.org/licenses/bsd-license.php
-#
-#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#Module Name:
-#
-# LShiftU64.c
-#
-#Abstract:
-#
-# 64-bit left shift function for IA-32
-#
-#--*/
-#
-#include "EfiBind.h"
-#---------------------------------------------------------------------------
- .686:
- #.MODEL flat,C
- .code:
-
-#---------------------------------------------------------------------------
-.globl ASM_PFX(LShiftU64)
-#
-#UINT64
-#LShiftU64 (
-# IN UINT64 Operand,
-# IN UINTN Count
-# )
-#/*++
-#
-#Routine Description:
-#
-# This routine allows a 64 bit value to be left shifted by 32 bits and
-# returns the shifted value.
-# Count is valid up 63. (Only Bits 0-5 is valid for Count)
-#
-#Arguments:
-#
-# Operand - Value to be shifted
-# Count - Number of times to shift left.
-#
-#Returns:
-#
-# Value shifted left identified by the Count.
-#
-#--*/
-ASM_PFX(LShiftU64):
-
- movl 4(%esp), %eax # dword ptr Operand[0]
- movl 8(%esp), %edx # dword ptr Operand[4]
-
- #
- # CL is valid from 0 - 31. shld will move EDX:EAX by CL times but EAX is not touched
- # For CL of 32 - 63, it will be shifted 0 - 31 so we will move eax to edx later.
- #
- movl 0xC(%esp), %ecx # Count
- andl $63, %ecx
- shld %cl, %eax, %edx
- shlb %cl, %eax
-
- #
- # Since Count is 32 - 63, eax will have been shifted by 0 - 31
- # If shifted by 32 or more, set lower 32 bits to zero.
- #
- cmpl $32, %ecx
- jc _LShiftU64_Done
-
- movl %eax, %edx
- xorl %eax, %eax
-
-_LShiftU64_Done:
-
- ret
-#LShiftU64 ENDP
-
+#/*++\r
+#\r
+#Copyright (c) 2006, Intel Corporation \r
+#All rights reserved. This program and the accompanying materials \r
+#are licensed and made available under the terms and conditions of the BSD License \r
+#which accompanies this distribution. The full text of the license may be found at \r
+#http://opensource.org/licenses/bsd-license.php \r
+# \r
+#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#\r
+#Module Name:\r
+#\r
+# LShiftU64.c\r
+#\r
+#Abstract:\r
+#\r
+# 64-bit left shift function for IA-32\r
+#\r
+#--*/\r
+#\r
+#include "EfiBind.h"\r
+#---------------------------------------------------------------------------\r
+ .686: \r
+ #.MODEL flat,C\r
+ .code: \r
+\r
+#---------------------------------------------------------------------------\r
+.globl ASM_PFX(LShiftU64)\r
+#\r
+#UINT64\r
+#LShiftU64 (\r
+# IN UINT64 Operand,\r
+# IN UINTN Count\r
+# )\r
+#/*++\r
+#\r
+#Routine Description:\r
+# \r
+# This routine allows a 64 bit value to be left shifted by 32 bits and \r
+# returns the shifted value.\r
+# Count is valid up 63. (Only Bits 0-5 is valid for Count)\r
+#\r
+#Arguments:\r
+#\r
+# Operand - Value to be shifted\r
+# Count - Number of times to shift left.\r
+# \r
+#Returns:\r
+#\r
+# Value shifted left identified by the Count.\r
+#\r
+#--*/\r
+ASM_PFX(LShiftU64):\r
+\r
+ movl 4(%esp), %eax # dword ptr Operand[0]\r
+ movl 8(%esp), %edx # dword ptr Operand[4]\r
+\r
+ #\r
+ # CL is valid from 0 - 31. shld will move EDX:EAX by CL times but EAX is not touched\r
+ # For CL of 32 - 63, it will be shifted 0 - 31 so we will move eax to edx later. \r
+ #\r
+ movl 0xC(%esp), %ecx # Count\r
+ andl $63, %ecx\r
+ shld %cl, %eax, %edx\r
+ shlb %cl, %eax\r
+\r
+ #\r
+ # Since Count is 32 - 63, eax will have been shifted by 0 - 31 \r
+ # If shifted by 32 or more, set lower 32 bits to zero.\r
+ #\r
+ cmpl $32, %ecx\r
+ jc _LShiftU64_Done\r
+\r
+ movl %eax, %edx\r
+ xorl %eax, %eax\r
+\r
+_LShiftU64_Done: \r
+\r
+ ret\r
+#LShiftU64 ENDP\r
+\r
-#/*++
-#
-#Copyright (c) 2006, Intel Corporation
-#All rights reserved. This program and the accompanying materials
-#are licensed and made available under the terms and conditions of the BSD License
-#which accompanies this distribution. The full text of the license may be found at
-#http://opensource.org/licenses/bsd-license.php
-#
-#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#Module Name:
-#
-# Log2.c
-#
-#Abstract:
-#
-# 64-bit integer logarithm function for IA-32
-#
-#--*/
-#
-#---------------------------------------------------------------------------
-#include "EfiBind.h" //For ASM_PFX
-#---------------------------------------------------------------------------
-
-.globl ASM_PFX(Log2)
-
-#UINT8
-#Log2 (
-# IN UINT64 Operand
-# )
-#/*++
-#
-#Routine Description:
-#
-# Calculates and floors logarithms based on 2
-#
-#Arguments:
-#
-# Operand - value to calculate logarithm
-#
-#Returns:
-#
-# The largest integer that is less than or equal
-# to the logarithm of Operand based on 2
-#
-#--*/
-ASM_PFX(Log2):
- movl $64, %ecx
-
- cmpl $0, 4(%esp) # (UINT32 *(&Operand))
- jne _Log2_Wend
- cmpl $0, 8(%esp) # (UINT32 *(&Operand)) + 1
- jne _Log2_Wend
- movb $0xFF, %cl
- jmp _Log2_Done
-
-_Log2_Wend:
- decl %ecx
- cmpl $32, %ecx
- jae _Log2_Higher
- btl %ecx, 4(%esp) # (UINT32 *(&Operand))
- jmp _Log2_Bit
-
-_Log2_Higher:
- movl %ecx, %eax
- subl $32, %eax
- btl %eax, 8(%esp) # (UINT32 *(&Operand)) + 1
-
-_Log2_Bit:
- jc _Log2_Done
- jmp _Log2_Wend
-
-_Log2_Done:
- movb %cl, %al
-
- ret
-
+#/*++\r
+#\r
+#Copyright (c) 2006, Intel Corporation \r
+#All rights reserved. This program and the accompanying materials \r
+#are licensed and made available under the terms and conditions of the BSD License \r
+#which accompanies this distribution. The full text of the license may be found at \r
+#http://opensource.org/licenses/bsd-license.php \r
+# \r
+#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#\r
+#Module Name:\r
+#\r
+# Log2.c\r
+#\r
+#Abstract:\r
+#\r
+# 64-bit integer logarithm function for IA-32\r
+#\r
+#--*/\r
+#\r
+#---------------------------------------------------------------------------\r
+#include "EfiBind.h" //For ASM_PFX\r
+#---------------------------------------------------------------------------\r
+\r
+.globl ASM_PFX(Log2)\r
+\r
+#UINT8\r
+#Log2 (\r
+# IN UINT64 Operand\r
+# )\r
+#/*++\r
+#\r
+#Routine Description:\r
+# \r
+# Calculates and floors logarithms based on 2\r
+#\r
+#Arguments:\r
+#\r
+# Operand - value to calculate logarithm\r
+# \r
+#Returns:\r
+#\r
+# The largest integer that is less than or equal\r
+# to the logarithm of Operand based on 2 \r
+#\r
+#--*/\r
+ASM_PFX(Log2):\r
+ movl $64, %ecx\r
+\r
+ cmpl $0, 4(%esp) # (UINT32 *(&Operand))\r
+ jne _Log2_Wend\r
+ cmpl $0, 8(%esp) # (UINT32 *(&Operand)) + 1\r
+ jne _Log2_Wend\r
+ movb $0xFF, %cl\r
+ jmp _Log2_Done\r
+\r
+_Log2_Wend: \r
+ decl %ecx\r
+ cmpl $32, %ecx\r
+ jae _Log2_Higher\r
+ btl %ecx, 4(%esp) # (UINT32 *(&Operand))\r
+ jmp _Log2_Bit\r
+\r
+_Log2_Higher: \r
+ movl %ecx, %eax\r
+ subl $32, %eax\r
+ btl %eax, 8(%esp) # (UINT32 *(&Operand)) + 1\r
+\r
+_Log2_Bit: \r
+ jc _Log2_Done\r
+ jmp _Log2_Wend\r
+\r
+_Log2_Done: \r
+ movb %cl, %al\r
+\r
+ ret\r
+\r
-#/*++
-#
-#Copyright (c) 2006, Intel Corporation
-#All rights reserved. This program and the accompanying materials
-#are licensed and made available under the terms and conditions of the BSD License
-#which accompanies this distribution. The full text of the license may be found at
-#http://opensource.org/licenses/bsd-license.php
-#
-#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#Module Name:
-#
-# MultU64x32.c
-#
-#Abstract:
-#
-# 64-bit Multiplication function for IA-32
-#
-#--*/
-#include "EfiBind.h"
-#---------------------------------------------------------------------------
- .686:
- #.MODEL flat,C
- .code:
-
-#---------------------------------------------------------------------------
-.globl ASM_PFX(MultU64x32)
-#UINT64
-#MultU64x32 (
-# IN UINT64 Multiplicand,
-# IN UINTN Multiplier
-# )
-#/*++
-#
-#Routine Description:
-#
-# This routine allows a 64 bit value to be multiplied with a 32 bit
-# value returns 64bit result.
-# No checking if the result is greater than 64bits
-#
-#Arguments:
-#
-# Multiplicand - multiplicand
-# Multiplier - multiplier
-#
-#Returns:
-#
-# Multiplicand * Multiplier
-#
-#--*/
-ASM_PFX(MultU64x32):
-
- movl 4(%esp), %eax # dword ptr Multiplicand[0]
- mull 0xC(%esp) # Multiplier
- pushl %eax
- pushl %edx
- movl 0x10(%esp), %eax # dword ptr Multiplicand[4]
- mull 0x14(%esp) # Multiplier
- #
- # The value in edx stored by second multiplication overflows
- # the output and should be discarded. So here we overwrite it
- # with the edx value of first multiplication.
- #
- popl %edx
- addl %eax, %edx
- popl %eax
-
- ret
-#MultU64x32 ENDP
-
+#/*++\r
+#\r
+#Copyright (c) 2006, Intel Corporation \r
+#All rights reserved. This program and the accompanying materials \r
+#are licensed and made available under the terms and conditions of the BSD License \r
+#which accompanies this distribution. The full text of the license may be found at \r
+#http://opensource.org/licenses/bsd-license.php \r
+# \r
+#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#\r
+#Module Name:\r
+#\r
+# MultU64x32.c\r
+#\r
+#Abstract:\r
+#\r
+# 64-bit Multiplication function for IA-32\r
+#\r
+#--*/\r
+#include "EfiBind.h"\r
+#---------------------------------------------------------------------------\r
+ .686: \r
+ #.MODEL flat,C\r
+ .code: \r
+\r
+#---------------------------------------------------------------------------\r
+.globl ASM_PFX(MultU64x32)\r
+#UINT64\r
+#MultU64x32 (\r
+# IN UINT64 Multiplicand,\r
+# IN UINTN Multiplier\r
+# )\r
+#/*++\r
+#\r
+#Routine Description:\r
+#\r
+# This routine allows a 64 bit value to be multiplied with a 32 bit \r
+# value returns 64bit result.\r
+# No checking if the result is greater than 64bits\r
+#\r
+#Arguments:\r
+#\r
+# Multiplicand - multiplicand\r
+# Multiplier - multiplier\r
+#\r
+#Returns:\r
+#\r
+# Multiplicand * Multiplier\r
+#\r
+#--*/\r
+ASM_PFX(MultU64x32):\r
+\r
+ movl 4(%esp), %eax # dword ptr Multiplicand[0]\r
+ mull 0xC(%esp) # Multiplier\r
+ pushl %eax\r
+ pushl %edx\r
+ movl 0x10(%esp), %eax # dword ptr Multiplicand[4]\r
+ mull 0x14(%esp) # Multiplier\r
+ #\r
+ # The value in edx stored by second multiplication overflows\r
+ # the output and should be discarded. So here we overwrite it\r
+ # with the edx value of first multiplication.\r
+ #\r
+ popl %edx\r
+ addl %eax, %edx\r
+ popl %eax\r
+\r
+ ret\r
+#MultU64x32 ENDP\r
+\r
-#/*++
-#
-#Copyright (c) 2006, Intel Corporation
-#All rights reserved. This program and the accompanying materials
-#are licensed and made available under the terms and conditions of the BSD License
-#which accompanies this distribution. The full text of the license may be found at
-#http://opensource.org/licenses/bsd-license.php
-#
-#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#Module Name:
-#
-# Power10U64.c
-#
-#Abstract:
-#
-# Calculates Operand * 10 ^ Power
-#
-#--*/
-#
-##include "Tiano.h"
-#include "EfiBind.h"
-#---------------------------------------------------------------------------
- .686:
- #.MODEL flat,C
- .code:
-
-.globl ASM_PFX(DivU64x32)
-#---------------------------------------------------------------------------
-#
-#UINT64
-#MultU64x32 (
-# IN UINT64 Multiplicand,
-# IN UINTN Multiplier
-# );
-#
-#UINT64
-#Power10U64 (
-# IN UINT64 Operand,
-# IN UINTN Power
-# )
-#/*++
-#
-#Routine Description:
-#
-# Raise 10 to the power of Power, and multiply the result with Operand
-#
-#Arguments:
-#
-# Operand - multiplicand
-# Power - power
-#
-#Returns:
-#
-# Operand * 10 ^ Power
-#
-#--*/
-ASM_PFX(Power10U64):
- pushl %ebp
- movl %esp, %ebp
- movl 8(%ebp), %eax # dword ptr Operand[0]
- movl 0xC(%ebp), %edx # dword ptr Operand[4]
- movl 0x10(%ebp), %ecx #Power
- jcxz _Power10U64_Done
-
-_Power10U64_Wend:
- pushl $10
- push 0xC(%ebp)
- push 0x8(%ebp)
- call ASM_PFX(MultU64x32)
- addl $0xc, %esp
- movl %eax, 8(%ebp) # dword ptr Operand[0]
- movl %edx, 0xC(%ebp) # dword ptr Operand[4]
- loopl _Power10U64_Wend
-
-_Power10U64_Done:
-
- popl %ebp
- ret
-#Power10U64 ENDP
-
+#/*++\r
+#\r
+#Copyright (c) 2006, Intel Corporation \r
+#All rights reserved. This program and the accompanying materials \r
+#are licensed and made available under the terms and conditions of the BSD License \r
+#which accompanies this distribution. The full text of the license may be found at \r
+#http://opensource.org/licenses/bsd-license.php \r
+# \r
+#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#\r
+#Module Name:\r
+#\r
+# Power10U64.c\r
+#\r
+#Abstract:\r
+#\r
+# Calculates Operand * 10 ^ Power\r
+#\r
+#--*/\r
+#\r
+##include "Tiano.h"\r
+#include "EfiBind.h"\r
+#---------------------------------------------------------------------------\r
+ .686: \r
+ #.MODEL flat,C\r
+ .code: \r
+\r
+.globl ASM_PFX(DivU64x32)\r
+#---------------------------------------------------------------------------\r
+#\r
+#UINT64\r
+#MultU64x32 (\r
+# IN UINT64 Multiplicand,\r
+# IN UINTN Multiplier\r
+# );\r
+#\r
+#UINT64\r
+#Power10U64 (\r
+# IN UINT64 Operand,\r
+# IN UINTN Power\r
+# )\r
+#/*++\r
+#\r
+#Routine Description:\r
+#\r
+# Raise 10 to the power of Power, and multiply the result with Operand\r
+#\r
+#Arguments:\r
+#\r
+# Operand - multiplicand\r
+# Power - power\r
+#\r
+#Returns:\r
+#\r
+# Operand * 10 ^ Power\r
+#\r
+#--*/\r
+ASM_PFX(Power10U64):\r
+ pushl %ebp\r
+ movl %esp, %ebp\r
+ movl 8(%ebp), %eax # dword ptr Operand[0]\r
+ movl 0xC(%ebp), %edx # dword ptr Operand[4]\r
+ movl 0x10(%ebp), %ecx #Power\r
+ jcxz _Power10U64_Done\r
+\r
+_Power10U64_Wend: \r
+ pushl $10\r
+ push 0xC(%ebp)\r
+ push 0x8(%ebp)\r
+ call ASM_PFX(MultU64x32)\r
+ addl $0xc, %esp\r
+ movl %eax, 8(%ebp) # dword ptr Operand[0]\r
+ movl %edx, 0xC(%ebp) # dword ptr Operand[4]\r
+ loopl _Power10U64_Wend\r
+\r
+_Power10U64_Done: \r
+\r
+ popl %ebp\r
+ ret\r
+#Power10U64 ENDP\r
+\r
-#/*++
-#
-#Copyright (c) 2006, Intel Corporation
-#All rights reserved. This program and the accompanying materials
-#are licensed and made available under the terms and conditions of the BSD License
-#which accompanies this distribution. The full text of the license may be found at
-#http://opensource.org/licenses/bsd-license.php
-#
-#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#Module Name:
-#
-# RShiftU64.c
-#
-#Abstract:
-#
-# 64-bit right shift function for IA-32
-#
-#--*/
-#
-##include "Tiano.h"
-#
-#include "EfiBind.h"
-#---------------------------------------------------------------------------
- .686:
- #.MODEL flat,C
- .code:
-
-#---------------------------------------------------------------------------
-.globl ASM_PFX(RShiftU64)
-#UINT64
-#RShiftU64 (
-# IN UINT64 Operand,
-# IN UINTN Count
-# )
-#/*++
-#
-#Routine Description:
-# This routine allows a 64 bit value to be right shifted by 32 bits and returns the
-# shifted value.
-# Count is valid up 63. (Only Bits 0-5 is valid for Count)
-#Arguments:
-# Operand - Value to be shifted
-# Count - Number of times to shift right.
-#
-#Returns:
-#
-# Value shifted right identified by the Count.
-#
-#--*/
-ASM_PFX(RShiftU64):
-
- movl 4(%esp), %eax # dword ptr Operand[0]
- movl 8(%esp), %edx # dword ptr Operand[4]
-
- #
- # CL is valid from 0 - 31. shld will move EDX:EAX by CL times but EDX is not touched
- # For CL of 32 - 63, it will be shifted 0 - 31 so we will move edx to eax later.
- #
- movl 0xC(%esp), %ecx # Count
- andl $63, %ecx
- shrd %cl, %edx, %eax
- shrb %cl, %edx
-
- cmpl $32, %ecx
- jc _RShiftU64_Done
-
- #
- # Since Count is 32 - 63, edx will have been shifted by 0 - 31
- # If shifted by 32 or more, set upper 32 bits to zero.
- #
- movl %edx, %eax
- xorl %edx, %edx
-
-_RShiftU64_Done:
-
- ret
-#RShiftU64 ENDP
-
+#/*++\r
+#\r
+#Copyright (c) 2006, Intel Corporation \r
+#All rights reserved. This program and the accompanying materials \r
+#are licensed and made available under the terms and conditions of the BSD License \r
+#which accompanies this distribution. The full text of the license may be found at \r
+#http://opensource.org/licenses/bsd-license.php \r
+# \r
+#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#\r
+#Module Name:\r
+#\r
+# RShiftU64.c\r
+#\r
+#Abstract:\r
+#\r
+# 64-bit right shift function for IA-32\r
+#\r
+#--*/\r
+#\r
+##include "Tiano.h"\r
+#\r
+#include "EfiBind.h"\r
+#---------------------------------------------------------------------------\r
+ .686: \r
+ #.MODEL flat,C\r
+ .code: \r
+\r
+#---------------------------------------------------------------------------\r
+.globl ASM_PFX(RShiftU64)\r
+#UINT64\r
+#RShiftU64 (\r
+# IN UINT64 Operand,\r
+# IN UINTN Count\r
+# )\r
+#/*++\r
+#\r
+#Routine Description:\r
+# This routine allows a 64 bit value to be right shifted by 32 bits and returns the \r
+# shifted value.\r
+# Count is valid up 63. (Only Bits 0-5 is valid for Count)\r
+#Arguments:\r
+# Operand - Value to be shifted\r
+# Count - Number of times to shift right.\r
+# \r
+#Returns:\r
+#\r
+# Value shifted right identified by the Count.\r
+#\r
+#--*/\r
+ASM_PFX(RShiftU64):\r
+\r
+ movl 4(%esp), %eax # dword ptr Operand[0]\r
+ movl 8(%esp), %edx # dword ptr Operand[4]\r
+\r
+ #\r
+ # CL is valid from 0 - 31. shld will move EDX:EAX by CL times but EDX is not touched\r
+ # For CL of 32 - 63, it will be shifted 0 - 31 so we will move edx to eax later. \r
+ #\r
+ movl 0xC(%esp), %ecx # Count\r
+ andl $63, %ecx\r
+ shrd %cl, %edx, %eax\r
+ shrb %cl, %edx\r
+\r
+ cmpl $32, %ecx\r
+ jc _RShiftU64_Done\r
+\r
+ #\r
+ # Since Count is 32 - 63, edx will have been shifted by 0 - 31 \r
+ # If shifted by 32 or more, set upper 32 bits to zero.\r
+ #\r
+ movl %edx, %eax\r
+ xorl %edx, %edx\r
+\r
+_RShiftU64_Done: \r
+\r
+ ret\r
+#RShiftU64 ENDP\r
+\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2008, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# EfiCopyMemRep1.S
-#
-# Abstract:
-#
-# CopyMem function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-#include <EfiBind.h>
-
- .code:
-
-.global ASM_PFX(EfiCommonLibCopyMem)
-
-#------------------------------------------------------------------------------
-# VOID
-# EfiCommonLibCopyMem (
-# OUT VOID *Destination,
-# IN VOID *Source,
-# IN UINTN Count
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(EfiCommonLibCopyMem):
- push %rsi
- push %rdi
- cmp %rcx,%rdx
- je CopyMemDone
- cmp $0x0,%r8
- je CopyMemDone
- mov %rdx,%rsi
- mov %rcx,%rdi
- lea -1(%r8,%rsi,1),%r9
- cmp %rdi,%rsi
- jae CopyBytes
- cmp %rdi,%r9
- jb CopyBytes
- mov %r9,%rsi
- lea -1(%r8,%rdi,1),%rdi
- std
-
-CopyBytes:
- mov %r8,%rcx
- rep movsb %ds:(%rsi),%es:(%rdi)
- cld
-
-CopyMemDone:
- pop %rdi
- pop %rsi
- retq
-
-
-
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2008, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# EfiCopyMemRep1.S\r
+#\r
+# Abstract:\r
+#\r
+# CopyMem function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EfiBind.h>\r
+\r
+ .code: \r
+\r
+.global ASM_PFX(EfiCommonLibCopyMem)\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EfiCommonLibCopyMem (\r
+# OUT VOID *Destination,\r
+# IN VOID *Source,\r
+# IN UINTN Count\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(EfiCommonLibCopyMem):\r
+ push %rsi\r
+ push %rdi\r
+ cmp %rcx,%rdx\r
+ je CopyMemDone\r
+ cmp $0x0,%r8\r
+ je CopyMemDone\r
+ mov %rdx,%rsi\r
+ mov %rcx,%rdi\r
+ lea -1(%r8,%rsi,1),%r9\r
+ cmp %rdi,%rsi\r
+ jae CopyBytes\r
+ cmp %rdi,%r9\r
+ jb CopyBytes\r
+ mov %r9,%rsi\r
+ lea -1(%r8,%rdi,1),%rdi\r
+ std \r
+\r
+CopyBytes:\r
+ mov %r8,%rcx\r
+ rep movsb %ds:(%rsi),%es:(%rdi)\r
+ cld \r
+\r
+CopyMemDone:\r
+ pop %rdi\r
+ pop %rsi\r
+ retq \r
+\r
+\r
+\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2008, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# EfiSetMemRep4.S
-#
-# Abstract:
-#
-# SetMem function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-#include <EfiBind.h>
-
- .code:
-
-.global ASM_PFX(EfiCommonLibCopyMem)
-
-#------------------------------------------------------------------------------
-# VOID
-# EfiCommonLibSetMem (
-# OUT VOID *Buffer,
-# IN UINTN Size,
-# IN UINT8 Value
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(EfiCommonLibSetMem):
- push %rdi
- cmp $0x0,%rdx
- je SetDone
- mov %rcx,%rdi
- mov %r8b,%al
- mov %al,%ah
- shrd $0x10,%eax,%ecx
- shld $0x10,%ecx,%eax
- mov %rdx,%rcx
- shr $0x2,%rcx
- rep stos %eax,%es:(%rdi)
- mov %rdx,%rcx
- and $0x3,%rcx
- rep stos %al,%es:(%rdi)
-SetDone:
- pop %rdi
- retq
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2008, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# EfiSetMemRep4.S\r
+#\r
+# Abstract:\r
+#\r
+# SetMem function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EfiBind.h>\r
+\r
+ .code: \r
+\r
+.global ASM_PFX(EfiCommonLibCopyMem)\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EfiCommonLibSetMem (\r
+# OUT VOID *Buffer,\r
+# IN UINTN Size,\r
+# IN UINT8 Value\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(EfiCommonLibSetMem):\r
+ push %rdi\r
+ cmp $0x0,%rdx\r
+ je SetDone\r
+ mov %rcx,%rdi\r
+ mov %r8b,%al\r
+ mov %al,%ah\r
+ shrd $0x10,%eax,%ecx\r
+ shld $0x10,%ecx,%eax\r
+ mov %rdx,%rcx\r
+ shr $0x2,%rcx\r
+ rep stos %eax,%es:(%rdi)\r
+ mov %rdx,%rcx\r
+ and $0x3,%rcx\r
+ rep stos %al,%es:(%rdi)\r
+SetDone:\r
+ pop %rdi\r
+ retq \r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2008, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# EfiZeroMemRep4.S
-#
-# Abstract:
-#
-# ZeroMem function
-#
-# Notes:
-#
-#------------------------------------------------------------------------------
-#include <EfiBind.h>
-
- .code:
-
-.global ASM_PFX(EfiCommonLibZeroMem)
-#------------------------------------------------------------------------------
-# VOID
-# EfiCommonLibZeroMem (
-# IN VOID *Buffer,
-# IN UINTN Size
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(EfiCommonLibZeroMem):
- push %rdi
- xor %rax,%rax
- mov %rcx,%rdi
- mov %rdx,%rcx
- shr $0x2,%rcx
- and $0x3,%rdx
- rep stos %eax,%es:(%rdi)
- mov %rdx,%rcx
- rep stos %al,%es:(%rdi)
- pop %rdi
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2008, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# EfiZeroMemRep4.S\r
+#\r
+# Abstract:\r
+#\r
+# ZeroMem function\r
+#\r
+# Notes:\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EfiBind.h>\r
+\r
+ .code: \r
+\r
+.global ASM_PFX(EfiCommonLibZeroMem)\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EfiCommonLibZeroMem (\r
+# IN VOID *Buffer,\r
+# IN UINTN Size\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(EfiCommonLibZeroMem):\r
+ push %rdi\r
+ xor %rax,%rax\r
+ mov %rcx,%rdi\r
+ mov %rdx,%rcx\r
+ shr $0x2,%rcx\r
+ and $0x3,%rdx\r
+ rep stos %eax,%es:(%rdi)\r
+ mov %rdx,%rcx\r
+ rep stos %al,%es:(%rdi)\r
+ pop %rdi\r
retq
\ No newline at end of file
-#
-# Copyright (c) 2004, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ProcessorAsms.Asm
-#
-#
-#
-#include "EfiBind.h"
-#------------------------------------------------------------------------------
-
- .686P:
- .MMX:
- #.MODEL SMALL
- .CODE:
-#------------------------------------------------------------------------------
-
-.globl ASM_PFX(TransferControlSetJump)
-.globl ASM_PFX(TransferControlLongJump)
-.globl ASM_PFX(SwitchStacks)
-.globl ASM_PFX(SwitchIplStacks)
-
-.equ EFI_SUCCESS, 0
-.equ EFI_WARN_RETURN_FROM_LONG_JUMP, 5
-
-#
-# typedef struct {
-# UINT32 ebx;
-# UINT32 esi;
-# UINT32 edi;
-# UINT32 ebp;
-# UINT32 esp;
-# UINT32 eip;
-#} EFI_JUMP_BUFFER;
-#
-
-#typedef
-#EFI_STATUS
-#(EFIAPI *EFI_PEI_TRANSFER_CONTROL_SET_JUMP) (
-# IN EFI_PEI_TRANSFER_CONTROL_PROTOCOL *This,
-# OUT EFI_JUMP_BUFFER *Context
-# );
-#
-#Routine Description:
-#
-# This routine implements the IA32 variant of the SetJump call. Its
-# responsibility is to store system state information for a possible
-# subsequent LongJump.
-#
-#Arguments:
-#
-# Pointer to CPU context save buffer.
-#
-#Returns:
-#
-# EFI_SUCCESS
-#
-ASM_PFX(TransferControlSetJump):
- push %ebp
- mov %esp,%ebp
- mov 0x8(%ebp),%eax
- mov 0xc(%ebp),%ecx
- mov %ebx,(%ecx)
- mov %esi,0x4(%ecx)
- mov %edi,0x8(%ecx)
- mov 0x0(%ebp),%eax
- mov %eax,0xc(%ecx)
- lea 0x4(%ebp),%eax
- mov %eax,0x10(%ecx)
- mov 0x4(%ebp),%eax
- mov %eax,0x14(%ecx)
- mov $0x0,%eax
- leave
- ret
-
-#typedef
-#EFI_STATUS
-#(EFIAPI *EFI_PEI_TRANSFER_CONTROL_LONG_JUMP) (
-# IN EFI_PEI_TRANSFER_CONTROL_PROTOCOL *This,
-# IN EFI_JUMP_BUFFER *Context
-# );
-#
-# Routine Description:
-#
-# This routine implements the IA32 variant of the LongJump call. Its
-# responsibility is restore the system state to the Context Buffer and
-# pass control back.
-#
-# Arguments:
-#
-# Pointer to CPU context save buffer.
-#
-# Returns:
-#
-# EFI_WARN_RETURN_FROM_LONG_JUMP
-#
-
-ASM_PFX(TransferControlLongJump):
- push %ebp
- mov %esp,%ebp
- push %ebx
- push %esi
- push %edi
- mov 0x8(%ebp),%eax
- mov $0x5,%eax
- mov 0xc(%ebp),%ecx
- mov (%ecx),%ebx
- mov 0x4(%ecx),%esi
- mov 0x8(%ecx),%edi
- mov 0xc(%ecx),%ebp
- mov 0x10(%ecx),%esp
- add $0x4,%esp
- jmp *0x14(%ecx)
- mov $0x5,%eax
- pop %edi
- pop %esi
- pop %ebx
- leave
- ret
-
-#
-# Routine Description:
-# This allows the caller to switch the stack and goes to the new entry point
-#
-# Arguments:
-# EntryPoint - Pointer to the location to enter
-# Parameter - Parameter to pass in
-# NewStack - New Location of the stack
-# NewBsp - New BSP
-#
-# Returns:
-#
-# Nothing. Goes to the Entry Point passing in the new parameters
-#
-#SwitchStacks PROC C \
-# EntryPoint:PTR DWORD, \
-# Parameter:DWORD, \
-# NewStack:PTR DWORD, \
-# NewBsp:PTR DWORD
-ASM_PFX(SwitchStacks):
- push %ebp
- mov %esp,%ebp
- push %ebx
- mov 0x14(%ebp),%eax
- mov 0xc(%ebp),%ebx
- mov 0x8(%ebp),%ecx
- mov 0x10(%ebp),%eax
- mov %eax,%esp
- push %ebx
- push $0x0
- jmp *%ecx
- pop %ebx
- leave
- ret
-
-
-
-
-#
-# Routine Description:
-# This allows the caller to switch the stack and goes to the new entry point
-#
-# Arguments:
-# EntryPoint - Pointer to the location to enter
-# Parameter1/Parameter2 - Parameter to pass in
-# NewStack - New Location of the stack
-# NewBsp - New BSP
-#
-# Returns:
-#
-# Nothing. Goes to the Entry Point passing in the new parameters
-#
-#SwitchIplStacks PROC C \
-# EntryPoint:PTR DWORD, \
-# Parameter1:DWORD, \
-# Parameter2:DWORD, \
-# NewStack:PTR DWORD, \
-# NewBsp:PTR DWORD
-ASM_PFX(SwitchIplStacks):
- push %ebp
- mov %esp,%ebp
- push %ebx
- mov 0x18(%ebp),%eax
- mov 0xc(%ebp),%ebx
- mov 0x10(%ebp),%edx
- mov 0x8(%ebp),%ecx
- mov 0x14(%ebp),%eax
- mov %eax,%esp
- push %edx
- push %ebx
- call *%ecx
- pop %ebx
- leave
- ret
-
-#SwitchIplStacks ENDP
-
-
-
+#\r
+# Copyright (c) 2004, Intel Corporation \r
+# All rights reserved. This program and the accompanying materials \r
+# are licensed and made available under the terms and conditions of the BSD License \r
+# which accompanies this distribution. The full text of the license may be found at \r
+# http://opensource.org/licenses/bsd-license.php \r
+# \r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+# \r
+# Module Name:\r
+# \r
+# ProcessorAsms.Asm\r
+#\r
+#\r
+#\r
+#include "EfiBind.h"\r
+#------------------------------------------------------------------------------\r
+\r
+ .686P: \r
+ .MMX: \r
+ #.MODEL SMALL\r
+ .CODE: \r
+#------------------------------------------------------------------------------\r
+ \r
+.globl ASM_PFX(TransferControlSetJump) \r
+.globl ASM_PFX(TransferControlLongJump)\r
+.globl ASM_PFX(SwitchStacks)\r
+.globl ASM_PFX(SwitchIplStacks)\r
+\r
+.equ EFI_SUCCESS, 0\r
+.equ EFI_WARN_RETURN_FROM_LONG_JUMP, 5\r
+\r
+#\r
+# typedef struct {\r
+# UINT32 ebx;\r
+# UINT32 esi;\r
+# UINT32 edi;\r
+# UINT32 ebp;\r
+# UINT32 esp;\r
+# UINT32 eip;\r
+#} EFI_JUMP_BUFFER;\r
+#\r
+\r
+#typedef \r
+#EFI_STATUS\r
+#(EFIAPI *EFI_PEI_TRANSFER_CONTROL_SET_JUMP) (\r
+# IN EFI_PEI_TRANSFER_CONTROL_PROTOCOL *This,\r
+# OUT EFI_JUMP_BUFFER *Context\r
+# );\r
+#\r
+#Routine Description:\r
+#\r
+# This routine implements the IA32 variant of the SetJump call. Its\r
+# responsibility is to store system state information for a possible\r
+# subsequent LongJump.\r
+#\r
+#Arguments:\r
+#\r
+# Pointer to CPU context save buffer.\r
+#\r
+#Returns:\r
+#\r
+# EFI_SUCCESS\r
+#\r
+ASM_PFX(TransferControlSetJump):\r
+ push %ebp\r
+ mov %esp,%ebp\r
+ mov 0x8(%ebp),%eax\r
+ mov 0xc(%ebp),%ecx\r
+ mov %ebx,(%ecx)\r
+ mov %esi,0x4(%ecx)\r
+ mov %edi,0x8(%ecx)\r
+ mov 0x0(%ebp),%eax\r
+ mov %eax,0xc(%ecx)\r
+ lea 0x4(%ebp),%eax\r
+ mov %eax,0x10(%ecx)\r
+ mov 0x4(%ebp),%eax\r
+ mov %eax,0x14(%ecx)\r
+ mov $0x0,%eax\r
+ leave \r
+ ret \r
+\r
+#typedef \r
+#EFI_STATUS\r
+#(EFIAPI *EFI_PEI_TRANSFER_CONTROL_LONG_JUMP) (\r
+# IN EFI_PEI_TRANSFER_CONTROL_PROTOCOL *This,\r
+# IN EFI_JUMP_BUFFER *Context\r
+# );\r
+#\r
+# Routine Description:\r
+# \r
+# This routine implements the IA32 variant of the LongJump call. Its\r
+# responsibility is restore the system state to the Context Buffer and\r
+# pass control back.\r
+#\r
+# Arguments:\r
+# \r
+# Pointer to CPU context save buffer.\r
+#\r
+# Returns:\r
+#\r
+# EFI_WARN_RETURN_FROM_LONG_JUMP\r
+#\r
+\r
+ASM_PFX(TransferControlLongJump):\r
+ push %ebp\r
+ mov %esp,%ebp\r
+ push %ebx\r
+ push %esi\r
+ push %edi\r
+ mov 0x8(%ebp),%eax\r
+ mov $0x5,%eax\r
+ mov 0xc(%ebp),%ecx\r
+ mov (%ecx),%ebx\r
+ mov 0x4(%ecx),%esi\r
+ mov 0x8(%ecx),%edi\r
+ mov 0xc(%ecx),%ebp\r
+ mov 0x10(%ecx),%esp\r
+ add $0x4,%esp\r
+ jmp *0x14(%ecx)\r
+ mov $0x5,%eax\r
+ pop %edi\r
+ pop %esi\r
+ pop %ebx\r
+ leave \r
+ ret \r
+\r
+#\r
+# Routine Description:\r
+# This allows the caller to switch the stack and goes to the new entry point\r
+#\r
+# Arguments:\r
+# EntryPoint - Pointer to the location to enter\r
+# Parameter - Parameter to pass in\r
+# NewStack - New Location of the stack\r
+# NewBsp - New BSP\r
+#\r
+# Returns:\r
+#\r
+# Nothing. Goes to the Entry Point passing in the new parameters\r
+#\r
+#SwitchStacks PROC C \\r
+# EntryPoint:PTR DWORD, \\r
+# Parameter:DWORD, \\r
+# NewStack:PTR DWORD, \\r
+# NewBsp:PTR DWORD\r
+ASM_PFX(SwitchStacks):\r
+ push %ebp\r
+ mov %esp,%ebp\r
+ push %ebx\r
+ mov 0x14(%ebp),%eax\r
+ mov 0xc(%ebp),%ebx\r
+ mov 0x8(%ebp),%ecx\r
+ mov 0x10(%ebp),%eax\r
+ mov %eax,%esp\r
+ push %ebx\r
+ push $0x0\r
+ jmp *%ecx\r
+ pop %ebx\r
+ leave \r
+ ret \r
+\r
+\r
+\r
+\r
+#\r
+# Routine Description:\r
+# This allows the caller to switch the stack and goes to the new entry point\r
+#\r
+# Arguments:\r
+# EntryPoint - Pointer to the location to enter\r
+# Parameter1/Parameter2 - Parameter to pass in\r
+# NewStack - New Location of the stack\r
+# NewBsp - New BSP\r
+#\r
+# Returns:\r
+#\r
+# Nothing. Goes to the Entry Point passing in the new parameters\r
+#\r
+#SwitchIplStacks PROC C \\r
+# EntryPoint:PTR DWORD, \\r
+# Parameter1:DWORD, \\r
+# Parameter2:DWORD, \\r
+# NewStack:PTR DWORD, \\r
+# NewBsp:PTR DWORD\r
+ASM_PFX(SwitchIplStacks):\r
+ push %ebp\r
+ mov %esp,%ebp\r
+ push %ebx\r
+ mov 0x18(%ebp),%eax\r
+ mov 0xc(%ebp),%ebx\r
+ mov 0x10(%ebp),%edx\r
+ mov 0x8(%ebp),%ecx\r
+ mov 0x14(%ebp),%eax\r
+ mov %eax,%esp\r
+ push %edx\r
+ push %ebx\r
+ call *%ecx\r
+ pop %ebx\r
+ leave \r
+ ret \r
+\r
+#SwitchIplStacks ENDP\r
+\r
+\r
+\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# ReadIdtBase.Asm
-#
-# Abstract:
-#
-# ReadIdtBase function
-#
-# Notes:
-#
-#include "EfiBind.h"
-#------------------------------------------------------------------------------
-
- .586:
- #.MODEL flat,C
- .code:
-
-.globl ASM_PFX(ReadIdtBasea)
-.globl ASM_PFX(ReadIdtLimita)
-
-#------------------------------------------------------------------------------
-# UINTN
-# ReadIdtBase (
-# void
-# )
-#
-# Abstract: Returns physical address of IDTR
-#
-ASM_PFX(ReadIdtBasea):
- push %ebp
- mov %esp,%ebp
- add $0xfffffff8,%esp
- sidtl 0xfffffffa(%ebp)
- mov 0xfffffffc(%ebp),%eax
- leave
- ret
-
-
-
-#------------------------------------------------------------------------------
-# UINT16
-# ReadIdtLimit (
-# void
-# )
-#
-# Abstract: Returns Limit of IDTR
-#
-ASM_PFX(ReadIdtLimita):
- push %ebp
- mov %esp,%ebp
- add $0xfffffff8,%esp
- sidtl 0xfffffffa(%ebp)
- mov 0xfffffffa(%ebp),%ax
- leave
- ret
-
-
-
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# ReadIdtBase.Asm\r
+#\r
+# Abstract:\r
+#\r
+# ReadIdtBase function\r
+#\r
+# Notes:\r
+#\r
+#include "EfiBind.h"\r
+#------------------------------------------------------------------------------\r
+\r
+ .586: \r
+ #.MODEL flat,C\r
+ .code: \r
+\r
+.globl ASM_PFX(ReadIdtBasea)\r
+.globl ASM_PFX(ReadIdtLimita)\r
+\r
+#------------------------------------------------------------------------------\r
+# UINTN\r
+# ReadIdtBase (\r
+# void\r
+# )\r
+#\r
+# Abstract: Returns physical address of IDTR\r
+#\r
+ASM_PFX(ReadIdtBasea):\r
+ push %ebp\r
+ mov %esp,%ebp\r
+ add $0xfffffff8,%esp\r
+ sidtl 0xfffffffa(%ebp)\r
+ mov 0xfffffffc(%ebp),%eax\r
+ leave \r
+ ret \r
+\r
+\r
+\r
+#------------------------------------------------------------------------------\r
+# UINT16\r
+# ReadIdtLimit (\r
+# void\r
+# )\r
+#\r
+# Abstract: Returns Limit of IDTR\r
+#\r
+ASM_PFX(ReadIdtLimita):\r
+ push %ebp\r
+ mov %esp,%ebp\r
+ add $0xfffffff8,%esp\r
+ sidtl 0xfffffffa(%ebp)\r
+ mov 0xfffffffa(%ebp),%ax\r
+ leave \r
+ ret \r
+\r
+\r
+\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2008, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# SupportItpDebug.asm
-#
-# Abstract:
-#
-# This is the code for debuging IA32, to add a break hook at loading every module
-#
-#------------------------------------------------------------------------------
-#include <EfiBind.h>
-
-# PROC:PRIVATE
- .686P:
- .MMX:
- #.MODEL SMALL
- .CODE:
-
-#------------------------------------------------------------------------------
-#------------------------------------------------------------------------------
-.globl ASM_PFX(AsmEfiSetBreakSupport)
-
-# VOID
-# AsmEfiSetBreakSupport (
-# IN UINTN LoadAddr
-# )
-#------------------------------------------------------------------------------
-ASM_PFX(AsmEfiSetBreakSupport):
- push %ebp
- mov %esp, %ebp
- mov 0x8(%ebp),%eax
- movw $60000, %dx
- outl %eax, %dx
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- ret
-
-#AsmEfiSetBreakSupport ENDP
-
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2008, Intel Corporation \r
+# All rights reserved. This program and the accompanying materials \r
+# are licensed and made available under the terms and conditions of the BSD License \r
+# which accompanies this distribution. The full text of the license may be found at \r
+# http://opensource.org/licenses/bsd-license.php \r
+# \r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#\r
+# Module Name:\r
+#\r
+# SupportItpDebug.asm\r
+# \r
+# Abstract:\r
+# \r
+# This is the code for debuging IA32, to add a break hook at loading every module\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EfiBind.h>\r
+\r
+# PROC:PRIVATE\r
+ .686P: \r
+ .MMX: \r
+ #.MODEL SMALL\r
+ .CODE: \r
+\r
+#------------------------------------------------------------------------------\r
+#------------------------------------------------------------------------------\r
+.globl ASM_PFX(AsmEfiSetBreakSupport) \r
+\r
+# VOID\r
+# AsmEfiSetBreakSupport (\r
+# IN UINTN LoadAddr\r
+# )\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(AsmEfiSetBreakSupport):\r
+ push %ebp\r
+ mov %esp, %ebp\r
+ mov 0x8(%ebp),%eax\r
+ movw $60000, %dx\r
+ outl %eax, %dx\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ ret\r
+\r
+#AsmEfiSetBreakSupport ENDP\r
+\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# WriteIdt.Asm
-#
-# Abstract:
-#
-# SetIdtBase function
-#
-# Notes:
-#
-#include "EfiBind.h"
-#------------------------------------------------------------------------------
-
- .586:
- #.MODEL flat,C
- .code:
-#------------------------------------------------------------------------------
-
-.globl ASM_PFX(SetIdtBase)
-
-# void
-# SetIdtBase (
-# UINT32 IdtBase,
-# UINT16 IdtLimit
-# )
-#
-# Abstract: Set IDTR with the given physical address
-#
-ASM_PFX(SetIdtBase):
- push %ebp
- mov %esp,%ebp
- add $0xfffffff8,%esp
- mov 0x8(%ebp),%eax
- mov 0xc(%ebp),%cx
- mov %eax,0xfffffffc(%ebp)
- mov %cx,0xfffffffa(%ebp)
- lidtl 0xfffffffa(%ebp)
- leave
- ret
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# WriteIdt.Asm\r
+#\r
+# Abstract:\r
+#\r
+# SetIdtBase function\r
+#\r
+# Notes:\r
+#\r
+#include "EfiBind.h"\r
+#------------------------------------------------------------------------------\r
+\r
+ .586: \r
+ #.MODEL flat,C\r
+ .code: \r
+#------------------------------------------------------------------------------\r
+\r
+.globl ASM_PFX(SetIdtBase)\r
+\r
+# void\r
+# SetIdtBase (\r
+# UINT32 IdtBase,\r
+# UINT16 IdtLimit \r
+# )\r
+#\r
+# Abstract: Set IDTR with the given physical address\r
+#\r
+ASM_PFX(SetIdtBase):\r
+ push %ebp\r
+ mov %esp,%ebp\r
+ add $0xfffffff8,%esp\r
+ mov 0x8(%ebp),%eax\r
+ mov 0xc(%ebp),%cx\r
+ mov %eax,0xfffffffc(%ebp)\r
+ mov %cx,0xfffffffa(%ebp)\r
+ lidtl 0xfffffffa(%ebp)\r
+ leave \r
+ ret \r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2008, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-# ProcessorAsms.S
-#
-# Abstract:
-# This is separated from processor.c to allow this functions to be built with /O1
-#
-#
-#------------------------------------------------------------------------------
-#include <EfiBind.h>
-
- .text
-
-.global ASM_PFX(SwitchStacks)
-.global ASM_PFX(TransferControlSetJump)
-.global ASM_PFX(TransferControlLongJump)
-
-#
-# Routine Description:
-# This allows the caller to switch the stack and goes to the new entry point
-#
-# Arguments:
-# EntryPoint - Pointer to the location to enter // rcx
-# Parameter - Parameter to pass in // rdx
-# NewStack - New Location of the stack // r8
-# NewBsp - New BSP // r9 - not used
-#
-# Returns:
-# Nothing. Goes to the Entry Point passing in the new parameters
-#
-ASM_PFX(SwitchStacks):
-
- # Adjust stack for
- # 1) leave 4 registers space
- # 2) let it 16 bytes aligned after call
- sub $0x20,%r8
- and -0x10,%r8w # do not assume 16 bytes aligned
-
- mov %r8,%rsp
- mov %rcx,%r10
- mov %rdx,%rcx
- callq *%r10
-
- #
- # no ret as we have a new stack and we jumped to the new location
- #
- ret
-
-#SwitchStacks ENDP
-
-
-.equ EFI_SUCCESS, 0
-.equ EFI_WARN_RETURN_FROM_LONG_JUMP, 5
-
-#
-#Routine Description:
-#
-# This routine implements the x64 variant of the SetJump call. Its
-# responsibility is to store system state information for a possible
-# subsequent LongJump.
-#
-#Arguments:
-#
-# Pointer to CPU context save buffer.
-#
-#Returns:
-#
-# EFI_SUCCESS
-#
-# EFI_STATUS
-# EFIAPI
-# TransferControlLongJump (
-# IN EFI_PEI_TRANSFER_CONTROL_PROTOCOL *This,
-# IN EFI_JUMP_BUFFER *Jump
-# );
-#
-# rcx - *This
-# rdx - JumpBuffer
-#
-ASM_PFX(TransferControlSetJump):
- mov %rbx,(%rdx)
- mov %rsp,0x8(%rdx)
- mov %rbp,0x10(%rdx)
- mov %rdi,0x18(%rdx)
- mov %rsi,0x20(%rdx)
- mov %r10,0x28(%rdx)
- mov %r11,0x30(%rdx)
- mov %r12,0x38(%rdx)
- mov %r13,0x40(%rdx)
- mov %r14,0x48(%rdx)
- mov %r15,0x50(%rdx)
- mov (%rsp),%rax
- mov %rax,0x58(%rdx)
- mov $0x0,%rax
- retq
-
-
-#
-# EFI_STATUS
-# EFIAPI
-# TransferControlLongJump (
-# IN EFI_PEI_TRANSFER_CONTROL_PROTOCOL *This, // rcx
-# IN EFI_JUMP_BUFFER *Jump // rdx
-# );
-#
-#
-ASM_PFX(TransferControlLongJump):
- # set return from SetJump to EFI_WARN_RETURN_FROM_LONG_JUMP
- mov $0x5,%rax
- mov (%rdx),%rbx
- mov 0x8(%rdx),%rsp
- mov 0x10(%rdx),%rbp
- mov 0x18(%rdx),%rdi
- mov 0x20(%rdx),%rsi
- mov 0x28(%rdx),%r10
- mov 0x30(%rdx),%r11
- mov 0x38(%rdx),%r12
- mov 0x40(%rdx),%r13
- mov 0x48(%rdx),%r14
- mov 0x50(%rdx),%r15
- add $0x8,%rsp
- jmpq *0x58(%rdx)
- mov $0x5,%rax
- retq
-
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2008, Intel Corporation \r
+# All rights reserved. This program and the accompanying materials \r
+# are licensed and made available under the terms and conditions of the BSD License \r
+# which accompanies this distribution. The full text of the license may be found at \r
+# http://opensource.org/licenses/bsd-license.php \r
+# \r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+# \r
+# Module Name:\r
+# ProcessorAsms.S\r
+#\r
+# Abstract:\r
+# This is separated from processor.c to allow this functions to be built with /O1\r
+#\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EfiBind.h>\r
+\r
+ .text\r
+\r
+.global ASM_PFX(SwitchStacks)\r
+.global ASM_PFX(TransferControlSetJump)\r
+.global ASM_PFX(TransferControlLongJump)\r
+\r
+#\r
+# Routine Description:\r
+# This allows the caller to switch the stack and goes to the new entry point\r
+#\r
+# Arguments:\r
+# EntryPoint - Pointer to the location to enter // rcx\r
+# Parameter - Parameter to pass in // rdx\r
+# NewStack - New Location of the stack // r8\r
+# NewBsp - New BSP // r9 - not used\r
+#\r
+# Returns:\r
+# Nothing. Goes to the Entry Point passing in the new parameters\r
+#\r
+ASM_PFX(SwitchStacks):\r
+\r
+ # Adjust stack for\r
+ # 1) leave 4 registers space\r
+ # 2) let it 16 bytes aligned after call\r
+ sub $0x20,%r8\r
+ and -0x10,%r8w # do not assume 16 bytes aligned\r
+\r
+ mov %r8,%rsp\r
+ mov %rcx,%r10\r
+ mov %rdx,%rcx\r
+ callq *%r10\r
+\r
+ #\r
+ # no ret as we have a new stack and we jumped to the new location\r
+ # \r
+ ret\r
+\r
+#SwitchStacks ENDP\r
+\r
+\r
+.equ EFI_SUCCESS, 0\r
+.equ EFI_WARN_RETURN_FROM_LONG_JUMP, 5\r
+\r
+#\r
+#Routine Description:\r
+#\r
+# This routine implements the x64 variant of the SetJump call. Its\r
+# responsibility is to store system state information for a possible\r
+# subsequent LongJump.\r
+#\r
+#Arguments:\r
+#\r
+# Pointer to CPU context save buffer.\r
+#\r
+#Returns:\r
+#\r
+# EFI_SUCCESS\r
+#\r
+# EFI_STATUS\r
+# EFIAPI\r
+# TransferControlLongJump (\r
+# IN EFI_PEI_TRANSFER_CONTROL_PROTOCOL *This,\r
+# IN EFI_JUMP_BUFFER *Jump\r
+# );\r
+#\r
+# rcx - *This\r
+# rdx - JumpBuffer\r
+#\r
+ASM_PFX(TransferControlSetJump):\r
+ mov %rbx,(%rdx)\r
+ mov %rsp,0x8(%rdx)\r
+ mov %rbp,0x10(%rdx)\r
+ mov %rdi,0x18(%rdx)\r
+ mov %rsi,0x20(%rdx)\r
+ mov %r10,0x28(%rdx)\r
+ mov %r11,0x30(%rdx)\r
+ mov %r12,0x38(%rdx)\r
+ mov %r13,0x40(%rdx)\r
+ mov %r14,0x48(%rdx)\r
+ mov %r15,0x50(%rdx)\r
+ mov (%rsp),%rax\r
+ mov %rax,0x58(%rdx)\r
+ mov $0x0,%rax\r
+ retq \r
+\r
+\r
+#\r
+# EFI_STATUS\r
+# EFIAPI\r
+# TransferControlLongJump (\r
+# IN EFI_PEI_TRANSFER_CONTROL_PROTOCOL *This, // rcx\r
+# IN EFI_JUMP_BUFFER *Jump // rdx\r
+# );\r
+#\r
+#\r
+ASM_PFX(TransferControlLongJump):\r
+ # set return from SetJump to EFI_WARN_RETURN_FROM_LONG_JUMP\r
+ mov $0x5,%rax\r
+ mov (%rdx),%rbx\r
+ mov 0x8(%rdx),%rsp\r
+ mov 0x10(%rdx),%rbp\r
+ mov 0x18(%rdx),%rdi\r
+ mov 0x20(%rdx),%rsi\r
+ mov 0x28(%rdx),%r10\r
+ mov 0x30(%rdx),%r11\r
+ mov 0x38(%rdx),%r12\r
+ mov 0x40(%rdx),%r13\r
+ mov 0x48(%rdx),%r14\r
+ mov 0x50(%rdx),%r15\r
+ add $0x8,%rsp\r
+ jmpq *0x58(%rdx)\r
+ mov $0x5,%rax\r
+ retq \r
+\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2008, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# SupportItpDebug.S
-#
-# Abstract:
-#
-# This is the code for debuging X64, to add a break hook at loading every module
-#
-#------------------------------------------------------------------------------
-#include <EfiBind.h>
-
- .text
-
-.global ASM_PFX(AsmEfiSetBreakSupport)
-
-#------------------------------------------------------------------------------
-# VOID
-# AsmEfiSetBreakSupport (
-# IN UINTN LoadAddr // rcx
-# )
-#------------------------------------------------------------------------------
-
-ASM_PFX(AsmEfiSetBreakSupport):
-
- movw $60000, %dx
- outl %eax, %dx
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- ret
-
-
-
-
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2008, Intel Corporation \r
+# All rights reserved. This program and the accompanying materials \r
+# are licensed and made available under the terms and conditions of the BSD License \r
+# which accompanies this distribution. The full text of the license may be found at \r
+# http://opensource.org/licenses/bsd-license.php \r
+# \r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#\r
+# Module Name:\r
+#\r
+# SupportItpDebug.S\r
+# \r
+# Abstract:\r
+# \r
+# This is the code for debuging X64, to add a break hook at loading every module\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EfiBind.h>\r
+\r
+ .text\r
+\r
+.global ASM_PFX(AsmEfiSetBreakSupport)\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# AsmEfiSetBreakSupport (\r
+# IN UINTN LoadAddr // rcx\r
+# )\r
+#------------------------------------------------------------------------------\r
+\r
+ASM_PFX(AsmEfiSetBreakSupport):\r
+\r
+ movw $60000, %dx\r
+ outl %eax, %dx\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ nop\r
+ ret\r
+\r
+\r
+\r
+\r
-#/*++
-#
-#Copyright (c) 2008, Intel Corporation
-#All rights reserved. This program and the accompanying materials
-#are licensed and made available under the terms and conditions of the BSD License
-#which accompanies this distribution. The full text of the license may be found at
-#http://opensource.org/licenses/bsd-license.php
- #
-#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#Module Name:
-#
- #CpuFlushCache.c
-#
-#Abstract:
-#
- #Cpu Flush Cache Function.
-#
-#--*/
-#---------------------------------------------------------------------------
-#include <EfiBind.h>
-
- .586p:
- #.MODEL flat,C
- .code:
-
-#---------------------------------------------------------------------------
-.global ASM_PFX(EfiCpuFlushCache)
-
-#
-#//
-#// Cache Flush Routine.
-#//
-#EFI_STATUS
-#EfiCpuFlushCache (
- #IN EFI_PHYSICAL_ADDRESS Start,
-# IN UINT64 Length
- #)
-#/*++
-#
-#Routine Description:
-#
- #Flush cache with specified range.
-#
-#Arguments:
-#
- #Start - Start address
-# Length - Length in bytes
-#
-#Returns:
-#
- #Status code
-#
- #EFI_SUCCESS - success
-#
-#--*/
-ASM_PFX(EfiCpuFlushCache):
- wbinvd
- xorl %eax, %eax
- ret
+#/*++\r
+#\r
+#Copyright (c) 2008, Intel Corporation \r
+#All rights reserved. This program and the accompanying materials \r
+#are licensed and made available under the terms and conditions of the BSD License \r
+#which accompanies this distribution. The full text of the license may be found at \r
+#http://opensource.org/licenses/bsd-license.php \r
+ #\r
+#THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+#WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#\r
+#Module Name:\r
+#\r
+ #CpuFlushCache.c\r
+#\r
+#Abstract:\r
+#\r
+ #Cpu Flush Cache Function.\r
+#\r
+#--*/\r
+#---------------------------------------------------------------------------\r
+#include <EfiBind.h>\r
+\r
+ .586p: \r
+ #.MODEL flat,C\r
+ .code: \r
+\r
+#---------------------------------------------------------------------------\r
+.global ASM_PFX(EfiCpuFlushCache)\r
+\r
+#\r
+#//\r
+#// Cache Flush Routine.\r
+#//\r
+#EFI_STATUS\r
+#EfiCpuFlushCache (\r
+ #IN EFI_PHYSICAL_ADDRESS Start,\r
+# IN UINT64 Length\r
+ #)\r
+#/*++\r
+#\r
+#Routine Description:\r
+#\r
+ #Flush cache with specified range.\r
+#\r
+#Arguments:\r
+#\r
+ #Start - Start address\r
+# Length - Length in bytes\r
+#\r
+#Returns:\r
+#\r
+ #Status code\r
+# \r
+ #EFI_SUCCESS - success\r
+#\r
+#--*/\r
+ASM_PFX(EfiCpuFlushCache):\r
+ wbinvd\r
+ xorl %eax, %eax\r
+ ret\r
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2008, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# RuntimeLibAsm.S
-#
-# Abstract:
-#
-#
-#------------------------------------------------------------------------------
-#include <EfiBind.h>
-
-.text
-
-.global ASM_PFX(EfiCpuFlushCache)
-#------------------------------------------------------------------------------
-#EFI_STATUS
-#EfiCpuFlushCache (
-# IN EFI_PHYSICAL_ADDRESS Start,
-# IN UINT64 Length
-# );
-#------------------------------------------------------------------------------
-
-ASM_PFX(EfiCpuFlushCache):
- wbinvd
- mov $0, %rax
- ret
-
+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2008, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+# Module Name:\r
+#\r
+# RuntimeLibAsm.S\r
+#\r
+# Abstract:\r
+#\r
+#\r
+#------------------------------------------------------------------------------\r
+#include <EfiBind.h>\r
+\r
+.text\r
+\r
+.global ASM_PFX(EfiCpuFlushCache)\r
+#------------------------------------------------------------------------------\r
+#EFI_STATUS\r
+#EfiCpuFlushCache (\r
+# IN EFI_PHYSICAL_ADDRESS Start,\r
+# IN UINT64 Length\r
+# );\r
+#------------------------------------------------------------------------------\r
+\r
+ASM_PFX(EfiCpuFlushCache):\r
+ wbinvd\r
+ mov $0, %rax\r
+ ret\r
+\r
-#*****************************************************************************
-#*
-#* Copyright (c) 2006, Intel Corporation
-#* All rights reserved. This program and the accompanying materials
-#* are licensed and made available under the terms and conditions of the BSD License
-#* which accompanies this distribution. The full text of the license may be found at
-#* http://opensource.org/licenses/bsd-license.php
-#*
-#* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#*
-#* Module Name:
-#*
-#* Fx.asm
-#*
-#* Abstract:
-#*
-#* AsmFxRestore and AsmFxSave function
-#*
-#include <EfiBind.h>
-#------------------------------------------------------------------------------
-
- .586P:
- #.MODEL flat,C
- .xmm:
- .code:
-#------------------------------------------------------------------------------
-.globl ASM_PFX(AsmFxSave)
-.globl ASM_PFX(AsmFxRestore)
-#------------------------------------------------------------------------------
-# VOID
-# AsmFxSave (
-# OUT IA32_FX_BUFFER *Buffer
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(AsmFxSave):
- movl 4(%esp), %eax
- fxsave (%eax)
- ret
-#AsmFxSave ENDP
-
-#------------------------------------------------------------------------------
-# VOID
-# AsmFxRestore (
-# IN CONST IA32_FX_BUFFER *Buffer
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(AsmFxRestore):
- movl 4(%esp), %eax
- fxrstor (%eax)
- ret
-#AsmFxRestore ENDP
-
-
+#*****************************************************************************\r
+#*\r
+#* Copyright (c) 2006, Intel Corporation \r
+#* All rights reserved. This program and the accompanying materials \r
+#* are licensed and made available under the terms and conditions of the BSD License \r
+#* which accompanies this distribution. The full text of the license may be found at \r
+#* http://opensource.org/licenses/bsd-license.php \r
+#* \r
+#* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+#* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#* \r
+#* Module Name:\r
+#*\r
+#* Fx.asm\r
+#* \r
+#* Abstract:\r
+#* \r
+#* AsmFxRestore and AsmFxSave function\r
+#* \r
+#include <EfiBind.h>\r
+#------------------------------------------------------------------------------\r
+\r
+ .586P: \r
+ #.MODEL flat,C\r
+ .xmm: \r
+ .code: \r
+#------------------------------------------------------------------------------\r
+.globl ASM_PFX(AsmFxSave)\r
+.globl ASM_PFX(AsmFxRestore)\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# AsmFxSave (\r
+# OUT IA32_FX_BUFFER *Buffer\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(AsmFxSave):\r
+ movl 4(%esp), %eax\r
+ fxsave (%eax)\r
+ ret\r
+#AsmFxSave ENDP\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# AsmFxRestore (\r
+# IN CONST IA32_FX_BUFFER *Buffer\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(AsmFxRestore):\r
+ movl 4(%esp), %eax\r
+ fxrstor (%eax)\r
+ ret\r
+#AsmFxRestore ENDP\r
+\r
+\r
-#*****************************************************************************
-#*
-#* Copyright (c) 2006 - 2007, Intel Corporation
-#* All rights reserved. This program and the accompanying materials
-#* are licensed and made available under the terms and conditions of the BSD License
-#* which accompanies this distribution. The full text of the license may be found at
-#* http://opensource.org/licenses/bsd-license.php
-#*
-#* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#*
-#* Module Name:
-#*
-#* Thunk.asm
-#*
-#* Abstract:
-#*
-#* Real mode thunk
-#*
-#*****************************************************************************
-#include <EfiBind.h>
-
- .686p:
-
-.globl ASM_PFX(mCode16Size)
-
-.data
-mCode16Size: .long _TEXT16SIZE
-
-.data
-
-NullSegSel: .quad 0
-_16BitCsSel:
- .word -1
- .word 0
- .byte 0
- .byte 0x9b
- .byte 0x8f # 16-bit segment
- .byte 0
-_16BitSsSel:
- .word -1
- .word 0
- .byte 0
- .byte 0x93
- .byte 0x8f # 16-bit segment
- .byte 0
-
-_16Gdtr:
- .word _16Gdtr - NullSegSel - 1
- .long NullSegSel
-
-
-.text
-.align 16
-
-
-ASM_PFX(Thunk16):
- push %ebp
- push %ebx
- push %esi
- push %edi
- push %ds
- push %es
- push %fs
- push %gs
- mov 0x24(%esp),%esi
- movzwl 0x32(%esi),%edx
- mov 0xc(%esi),%edi
- add $0xffffffb0,%edi
- push %edi #; save stack offset
- imul $0x10,%edx,%eax #; eax <- edx*16
- add %eax,%edi #; edi <- linear address of 16-bit stack
- push $0xd
- pop %ecx
- rep movsl %ds:(%esi),%es:(%edi) #; copy context to 16-bit stack
- pop %ebx #; ebx <- 16-bit stack offset
- mov $L_Label1,%eax
- stos %eax,%es:(%edi)
- movl %cs,%eax
- stos %ax,%es:(%edi)
- mov 0x28(%esp),%eax
- stos %ax,%es:(%edi)
- mov %esp,%eax
- stos %eax,%es:(%edi)
- movl %ss,%eax
- stos %ax,%es:(%edi)
- sgdtl (%edi)
- sidtl 0x24(%esp)
- mov %cr0,%esi
- mov %esi,0x6(%edi) #; save CR0
- and $0x7ffffffe,%esi #; esi <- CR0 to set
- mov %cr4,%eax
- mov %eax,0xa(%edi) #; save CR4
- and $0xcf,%al #; clear PAE & PSE
- mov %edx,%edi #; edi <- 16-bit stack segment
- mov 0x2c(%esp),%edx
- shl $0x10,%edx
- push %edx
- pop %edx
- mov $(_16BitSsSel - NullSegSel),%dx
- lgdtl _16Gdtr #bugbug mismatch.
- .byte 0xea
- .long L_16Bit #bugbug mismatch.
- .word _16BitCsSel - NullSegSel
-L_16Bit:
- .byte 0x66
- movw %dx,%ss
- mov %esi,%cr0
- mov %eax,%cr4
- .byte 0x67
- .byte 0xff
- .byte 0x6c
- .byte 0x24
- .byte 0xfc
-
-L_Lable1:
- movl %ss,%eax
- shl $0x4,%eax
- add %esp,%eax
- lss 0x3c(%esp),%esp
- lidtl 0x24(%esp)
- pop %gs
- pop %fs
- pop %es
- pop %ds
- pop %edi
- pop %esi
- pop %ebx
- pop %ebp
- ret
-
-.code16
-_Code16Addr:
-ASM_PFX(RealMode):
- movw %di, %ss # set up stack
- movl %ebx, %esp
- lidt %cs:_16Idtr - _Code16Addr #lidt fword ptr cs:[_16Idtr - _Code16Addr]
- .byte 0x66
- popaw
- popw %ds
- popw %es
- popw %fs
- popw %gs
- addw $4, %sp # skip EFlags
- testw $1, 14(%esp) #(_STK16 ptr [esp + 8]).ThunkFlags, 1
- jz 1f
- pushf
-1:
- pushw %cs
-# push @FarCallRet - _Code16Addr
- .byte 0x68 # push /iw
- .word FarCallRet - _Code16Addr
- jz 2f
- ljmp *6(%esp) #bugbug
-2:
- ljmp *4(%esp) #bugbug
-FarCallRet:
- pushfl
- pushw %gs
- pushw %fs
- pushw %es
- pushw %ds
- pushal
- cli
- .byte 0x66 # sizeof (IA32_REGS) = 13 * 4 = 52
- lgdt 66(%esp) #lgdt (_STK16 ptr [esp + sizeof (IA32_REGS)]).SavedGdtr
- mov 76(%esp), %eax
- movl %eax, %cr4
- mov 72(%esp), %eax
- movl %eax, %cr0 # restore CR0
- ljmpl *52(%esp)
-#RealMode ENDP
-
-.text
-_16Idtr:
- .word 0x3ff #_16Idtr FWORD (1 SHL 10) - 1
- .byte 0x00
-
-_TEXT16END:
-
-_TEXT16SIZE = _TEXT16END - _Code16Addr
-
-
+#*****************************************************************************\r
+#*\r
+#* Copyright (c) 2006 - 2007, Intel Corporation \r
+#* All rights reserved. This program and the accompanying materials \r
+#* are licensed and made available under the terms and conditions of the BSD License \r
+#* which accompanies this distribution. The full text of the license may be found at \r
+#* http://opensource.org/licenses/bsd-license.php \r
+#* \r
+#* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+#* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#* \r
+#* Module Name:\r
+#*\r
+#* Thunk.asm\r
+#* \r
+#* Abstract:\r
+#* \r
+#* Real mode thunk\r
+#* \r
+#*****************************************************************************\r
+#include <EfiBind.h>\r
+\r
+ .686p: \r
+\r
+.globl ASM_PFX(mCode16Size)\r
+\r
+.data\r
+mCode16Size: .long _TEXT16SIZE\r
+\r
+.data\r
+\r
+NullSegSel: .quad 0\r
+_16BitCsSel: \r
+ .word -1\r
+ .word 0\r
+ .byte 0\r
+ .byte 0x9b\r
+ .byte 0x8f # 16-bit segment\r
+ .byte 0\r
+_16BitSsSel:\r
+ .word -1\r
+ .word 0\r
+ .byte 0\r
+ .byte 0x93\r
+ .byte 0x8f # 16-bit segment\r
+ .byte 0\r
+\r
+_16Gdtr:\r
+ .word _16Gdtr - NullSegSel - 1\r
+ .long NullSegSel\r
+\r
+\r
+.text\r
+.align 16\r
+\r
+\r
+ASM_PFX(Thunk16):\r
+ push %ebp\r
+ push %ebx\r
+ push %esi\r
+ push %edi\r
+ push %ds\r
+ push %es\r
+ push %fs\r
+ push %gs\r
+ mov 0x24(%esp),%esi\r
+ movzwl 0x32(%esi),%edx\r
+ mov 0xc(%esi),%edi\r
+ add $0xffffffb0,%edi\r
+ push %edi #; save stack offset\r
+ imul $0x10,%edx,%eax #; eax <- edx*16\r
+ add %eax,%edi #; edi <- linear address of 16-bit stack\r
+ push $0xd\r
+ pop %ecx\r
+ rep movsl %ds:(%esi),%es:(%edi) #; copy context to 16-bit stack\r
+ pop %ebx #; ebx <- 16-bit stack offset\r
+ mov $L_Label1,%eax\r
+ stos %eax,%es:(%edi)\r
+ movl %cs,%eax\r
+ stos %ax,%es:(%edi)\r
+ mov 0x28(%esp),%eax\r
+ stos %ax,%es:(%edi)\r
+ mov %esp,%eax\r
+ stos %eax,%es:(%edi)\r
+ movl %ss,%eax\r
+ stos %ax,%es:(%edi)\r
+ sgdtl (%edi)\r
+ sidtl 0x24(%esp)\r
+ mov %cr0,%esi\r
+ mov %esi,0x6(%edi) #; save CR0\r
+ and $0x7ffffffe,%esi #; esi <- CR0 to set\r
+ mov %cr4,%eax\r
+ mov %eax,0xa(%edi) #; save CR4\r
+ and $0xcf,%al #; clear PAE & PSE\r
+ mov %edx,%edi #; edi <- 16-bit stack segment\r
+ mov 0x2c(%esp),%edx\r
+ shl $0x10,%edx\r
+ push %edx\r
+ pop %edx\r
+ mov $(_16BitSsSel - NullSegSel),%dx\r
+ lgdtl _16Gdtr #bugbug mismatch.\r
+ .byte 0xea\r
+ .long L_16Bit #bugbug mismatch.\r
+ .word _16BitCsSel - NullSegSel\r
+L_16Bit: \r
+ .byte 0x66 \r
+ movw %dx,%ss\r
+ mov %esi,%cr0\r
+ mov %eax,%cr4\r
+ .byte 0x67\r
+ .byte 0xff\r
+ .byte 0x6c\r
+ .byte 0x24\r
+ .byte 0xfc\r
+ \r
+L_Lable1:\r
+ movl %ss,%eax\r
+ shl $0x4,%eax\r
+ add %esp,%eax\r
+ lss 0x3c(%esp),%esp\r
+ lidtl 0x24(%esp)\r
+ pop %gs\r
+ pop %fs\r
+ pop %es\r
+ pop %ds\r
+ pop %edi\r
+ pop %esi\r
+ pop %ebx\r
+ pop %ebp\r
+ ret \r
+\r
+.code16\r
+_Code16Addr:\r
+ASM_PFX(RealMode):\r
+ movw %di, %ss # set up stack\r
+ movl %ebx, %esp\r
+ lidt %cs:_16Idtr - _Code16Addr #lidt fword ptr cs:[_16Idtr - _Code16Addr]\r
+ .byte 0x66\r
+ popaw\r
+ popw %ds\r
+ popw %es\r
+ popw %fs\r
+ popw %gs\r
+ addw $4, %sp # skip EFlags\r
+ testw $1, 14(%esp) #(_STK16 ptr [esp + 8]).ThunkFlags, 1\r
+ jz 1f\r
+ pushf\r
+1: \r
+ pushw %cs\r
+# push @FarCallRet - _Code16Addr\r
+ .byte 0x68 # push /iw\r
+ .word FarCallRet - _Code16Addr\r
+ jz 2f\r
+ ljmp *6(%esp) #bugbug\r
+2: \r
+ ljmp *4(%esp) #bugbug\r
+FarCallRet: \r
+ pushfl\r
+ pushw %gs\r
+ pushw %fs\r
+ pushw %es\r
+ pushw %ds\r
+ pushal\r
+ cli\r
+ .byte 0x66 # sizeof (IA32_REGS) = 13 * 4 = 52\r
+ lgdt 66(%esp) #lgdt (_STK16 ptr [esp + sizeof (IA32_REGS)]).SavedGdtr\r
+ mov 76(%esp), %eax\r
+ movl %eax, %cr4\r
+ mov 72(%esp), %eax\r
+ movl %eax, %cr0 # restore CR0\r
+ ljmpl *52(%esp) \r
+#RealMode ENDP\r
+\r
+.text\r
+_16Idtr:\r
+ .word 0x3ff #_16Idtr FWORD (1 SHL 10) - 1\r
+ .byte 0x00\r
+\r
+_TEXT16END: \r
+\r
+_TEXT16SIZE = _TEXT16END - _Code16Addr\r
+\r
+\r
-#*****************************************************************************
-#*
-#* Copyright (c) 2008, Intel Corporation
-#* All rights reserved. This program and the accompanying materials
-#* are licensed and made available under the terms and conditions of the BSD License
-#* which accompanies this distribution. The full text of the license may be found at
-#* http://opensource.org/licenses/bsd-license.php
-#*
-#* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#*
-#* Module Name:
-#*
-#* Fx.S
-#*
-#* Abstract:
-#*
-#* AsmFxRestore and AsmFxSave function
-#*
-#*****************************************************************************
-#include <EfiBind.h>
-
-.global ASM_PFX(AsmFxSave)
-.global ASM_PFX(AsmFxRestore)
-
- .text
-
-#------------------------------------------------------------------------------
-# VOID
-# AsmFxSave (
-# OUT IA32_FX_BUFFER *Buffer
-# );
-#------------------------------------------------------------------------------
-ASM_PFX(AsmFxSave):
- fxsave (%rcx)
- retq
-
-#------------------------------------------------------------------------------
-# VOID
-# AsmFxRestore (
-# IN CONST IA32_FX_BUFFER *Buffer
-# );
-#------------------------------------------------------------------------------
-
-ASM_PFX(AsmFxRestore):
- fxrstor (%rcx)
- retq
+#*****************************************************************************\r
+#*\r
+#* Copyright (c) 2008, Intel Corporation \r
+#* All rights reserved. This program and the accompanying materials \r
+#* are licensed and made available under the terms and conditions of the BSD License \r
+#* which accompanies this distribution. The full text of the license may be found at \r
+#* http://opensource.org/licenses/bsd-license.php \r
+#* \r
+#* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+#* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#* \r
+#* Module Name:\r
+#*\r
+#* Fx.S\r
+#* \r
+#* Abstract:\r
+#* \r
+#* AsmFxRestore and AsmFxSave function\r
+#* \r
+#*****************************************************************************\r
+#include <EfiBind.h>\r
+\r
+.global ASM_PFX(AsmFxSave)\r
+.global ASM_PFX(AsmFxRestore)\r
+\r
+ .text\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# AsmFxSave (\r
+# OUT IA32_FX_BUFFER *Buffer\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_PFX(AsmFxSave):\r
+ fxsave (%rcx)\r
+ retq\r
+ \r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# AsmFxRestore (\r
+# IN CONST IA32_FX_BUFFER *Buffer\r
+# );\r
+#------------------------------------------------------------------------------\r
+\r
+ASM_PFX(AsmFxRestore):\r
+ fxrstor (%rcx)\r
+ retq\r
\ No newline at end of file
-#*****************************************************************************
-#*
-#* Copyright (c) 2008, Intel Corporation
-#* All rights reserved. This program and the accompanying materials
-#* are licensed and made available under the terms and conditions of the BSD License
-#* which accompanies this distribution. The full text of the license may be found at
-#* http://opensource.org/licenses/bsd-license.php
-#*
-#* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#*
-#* Module Name:
-#*
-#* Thunk.S
-#*
-#* Abstract:
-#*
-#* Real mode thunk
-#*
-#*****************************************************************************
-#include <EfiBind.h>
-
-
-
- .data
-
-.globl ASM_PFX(mCode16Size)
-
-.data
-mCode16Size: .long _Code16End - _Code16Addr
-
-
-NullSegSel: .quad 0
-_16CsSegSel:
- .word -1
- .word 0
- .byte 0
- .byte 0x9b
- .byte 0x8f #16-bit segment
- .byte 0
-_16DsSegSel:
- .word -1
- .word 0
- .byte 0
- .byte 0x93
- .byte 0x8f #16-bit segment
- .byte 0
-
-_16Gdtr:
- .word _16Gdtr - NullSegSel - 1
- .long NullSegSel
- .code:
-
+#*****************************************************************************\r
+#*\r
+#* Copyright (c) 2008, Intel Corporation \r
+#* All rights reserved. This program and the accompanying materials \r
+#* are licensed and made available under the terms and conditions of the BSD License \r
+#* which accompanies this distribution. The full text of the license may be found at \r
+#* http://opensource.org/licenses/bsd-license.php \r
+#* \r
+#* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+#* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+#* \r
+#* Module Name:\r
+#*\r
+#* Thunk.S\r
+#* \r
+#* Abstract:\r
+#* \r
+#* Real mode thunk\r
+#* \r
+#*****************************************************************************\r
+#include <EfiBind.h>\r
+\r
+\r
+\r
+ .data\r
+\r
+.globl ASM_PFX(mCode16Size)\r
+\r
+.data\r
+mCode16Size: .long _Code16End - _Code16Addr\r
+\r
+\r
+NullSegSel: .quad 0\r
+_16CsSegSel: \r
+ .word -1\r
+ .word 0\r
+ .byte 0\r
+ .byte 0x9b\r
+ .byte 0x8f #16-bit segment\r
+ .byte 0\r
+_16DsSegSel:\r
+ .word -1\r
+ .word 0\r
+ .byte 0\r
+ .byte 0x93\r
+ .byte 0x8f #16-bit segment\r
+ .byte 0\r
+\r
+_16Gdtr:\r
+ .word _16Gdtr - NullSegSel - 1\r
+ .long NullSegSel\r
+ .code: \r
+\r
#IA32_REGS STRUC 4t\r
#_EDI DD ?\r
#_ESI DD ?\r
#SavedCr0 DD ?\r
#SavedCr4 DD ?\r
#_STK16 ENDS\r
-
-ASM_PFX(Thunk16):
- push %rbp
- push %rbx
- push %rsi
- push %rdi
- push %r12
- push %r13
- push %r14
- push %r15
- pushq %fs
- pushq %gs
- movl %ds,%r12d
- movl %es,%r13d
- movl %ss,%r14d
- mov %rsp,%r15
- mov %rcx,%rsi
- movzwq 0x36(%rsi),%r10 #movzx r10, (IA32_REGS ptr [rsi])._SS
- xor %rdi,%rdi
- mov 0xc(%rsi),%edi #mov edi, (IA32_REGS ptr [rsi])._ESP
- add $0xffffffffffffffb0,%rdi #add rdi, - sizeof (IA32_REGS) - sizeof (_STK16)
- push %rdi
- imul $0x10,%r10,%rax
- add %rax,%rdi
- pushq $0xe #push sizeof (IA32_REGS) / 4
- pop %rcx
- rep movsl %ds:(%rsi),%es:(%rdi)
- pop %rbx #rbx <- 16-bit stack offset
- lea Label,%eax #42 <_Thunk16+0x42>
- stos %eax,%es:(%rdi)
- movl %cs,%eax #return segment
- stos %ax,%es:(%rdi)
- mov %edx,%eax #THUNK Flags
- stos %ax,%es:(%rdi)
- sgdt 0x58(%rsp) #save GDTR
- mov 0x58(%rsp),%rax
- stos %rax,%es:(%rdi)
- mov %cr0,%rax #save CR0
- mov %eax,%esi #esi <- CR0 to set
- stos %eax,%es:(%rdi)
- mov %cr4,%rax #save CR4
- stos %eax,%es:(%rdi)
- sidt 0x58(%rsp) #save IDTR
- and $0x7ffffffe,%esi #clear PE & PG bits
- mov %r10,%rdi #rdi <- 16-bit stack segment
- shl $0x10,%r8
- push %r8 #far jmp address
- lea Label_16Bit,%eax
- push %rax
- movw $0x8,0x4(%rsp)
- lgdt _16Gdtr #bugbug: may not match.
- lret
-Label_16Bit:
- .byte 0x66
- movl $0xc0000080,%ecx
- mov %rsi,%cr0 #disable PE & PG
- rdmsr
- and $0xfe,%ah
- wrmsr #clear LME bit
- mov %cr4,%rax
- and $0xcf,%al #clear PAE & PSE
- mov %rax,%cr4
- lret
-
-Label:
- xor %rax,%rax
- movl %ss,%eax
- shl $0x4,%eax
- add %esp,%eax
- mov %r15,%rsp
- lidt 0x58(%rsp)
- movl %r12d,%ds
- movl %r13d,%es
- movl %r14d,%ss
- popq %gs
- popq %fs
- pop %r15
- pop %r14
- pop %r13
- pop %r12
- pop %rdi
- pop %rsi
- pop %rbx
- pop %rbp
- retq
-
-
- .align 0x10
-
-_Code16Addr:
-ASM_PFX(RealMode):
- movl %edi,%ss
- mov %bx,%sp #set up 16-bit stack
- .byte 0x2e
- .byte 0x0f
- .byte 0x01
+\r
+ASM_PFX(Thunk16):\r
+ push %rbp\r
+ push %rbx\r
+ push %rsi\r
+ push %rdi\r
+ push %r12\r
+ push %r13\r
+ push %r14\r
+ push %r15\r
+ pushq %fs\r
+ pushq %gs\r
+ movl %ds,%r12d\r
+ movl %es,%r13d\r
+ movl %ss,%r14d\r
+ mov %rsp,%r15\r
+ mov %rcx,%rsi\r
+ movzwq 0x36(%rsi),%r10 #movzx r10, (IA32_REGS ptr [rsi])._SS\r
+ xor %rdi,%rdi\r
+ mov 0xc(%rsi),%edi #mov edi, (IA32_REGS ptr [rsi])._ESP\r
+ add $0xffffffffffffffb0,%rdi #add rdi, - sizeof (IA32_REGS) - sizeof (_STK16)\r
+ push %rdi\r
+ imul $0x10,%r10,%rax\r
+ add %rax,%rdi\r
+ pushq $0xe #push sizeof (IA32_REGS) / 4\r
+ pop %rcx\r
+ rep movsl %ds:(%rsi),%es:(%rdi)\r
+ pop %rbx #rbx <- 16-bit stack offset\r
+ lea Label,%eax #42 <_Thunk16+0x42>\r
+ stos %eax,%es:(%rdi)\r
+ movl %cs,%eax #return segment\r
+ stos %ax,%es:(%rdi)\r
+ mov %edx,%eax #THUNK Flags\r
+ stos %ax,%es:(%rdi)\r
+ sgdt 0x58(%rsp) #save GDTR\r
+ mov 0x58(%rsp),%rax\r
+ stos %rax,%es:(%rdi)\r
+ mov %cr0,%rax #save CR0\r
+ mov %eax,%esi #esi <- CR0 to set\r
+ stos %eax,%es:(%rdi)\r
+ mov %cr4,%rax #save CR4\r
+ stos %eax,%es:(%rdi)\r
+ sidt 0x58(%rsp) #save IDTR\r
+ and $0x7ffffffe,%esi #clear PE & PG bits\r
+ mov %r10,%rdi #rdi <- 16-bit stack segment\r
+ shl $0x10,%r8\r
+ push %r8 #far jmp address\r
+ lea Label_16Bit,%eax \r
+ push %rax\r
+ movw $0x8,0x4(%rsp)\r
+ lgdt _16Gdtr #bugbug: may not match.\r
+ lret \r
+Label_16Bit:\r
+ .byte 0x66\r
+ movl $0xc0000080,%ecx\r
+ mov %rsi,%cr0 #disable PE & PG \r
+ rdmsr \r
+ and $0xfe,%ah\r
+ wrmsr #clear LME bit\r
+ mov %cr4,%rax\r
+ and $0xcf,%al #clear PAE & PSE\r
+ mov %rax,%cr4\r
+ lret \r
+\r
+Label:\r
+ xor %rax,%rax\r
+ movl %ss,%eax\r
+ shl $0x4,%eax\r
+ add %esp,%eax\r
+ mov %r15,%rsp\r
+ lidt 0x58(%rsp)\r
+ movl %r12d,%ds\r
+ movl %r13d,%es\r
+ movl %r14d,%ss\r
+ popq %gs\r
+ popq %fs\r
+ pop %r15\r
+ pop %r14\r
+ pop %r13\r
+ pop %r12\r
+ pop %rdi\r
+ pop %rsi\r
+ pop %rbx\r
+ pop %rbp\r
+ retq \r
+\r
+\r
+ .align 0x10\r
+\r
+_Code16Addr:\r
+ASM_PFX(RealMode):\r
+ movl %edi,%ss\r
+ mov %bx,%sp #set up 16-bit stack\r
+ .byte 0x2e \r
+ .byte 0x0f \r
+ .byte 0x01\r
.byte 0x1e\r
.word _16Idtr - _Code16Addr #lidt _16Idtr\r
- .byte 0x66
+ .byte 0x66\r
.byte 0x61 #popad\r
.byte 0x1f #pop ds\r
- .byte 0x07 #pop es
+ .byte 0x07 #pop es\r
popq %fs\r
popq %gs\r
add $0x8,%esp #skip RFLAGS\r
- .byte 0x67 #test [esp + 0eh], 1
- .byte 0xf7
- .byte 0x44
- .byte 0x24
- .byte 0x0e
- .byte 0x01
- .byte 0x00
- jz 1f
- pushfq #pushf, actually
-1:
- .byte 0x0e #push cs
- .byte 0x68 #push /iw
- .word FarCallRet - _Code16Addr
- jz 2f
- .byte 0x66
- ljmp *6(%esp)
-2:
- .byte 0x66
- ljmp *4(%esp)
-FarCallRet:
- .byte 0x66
- push $0x00 #push a dword of zero
- .byte 0x66
- pushf #pushfd, actually
- pushq %gs
- pushq %fs
- .byte 0x06 #push %es
- .byte 0x1e #push %ds
- .byte 0x66
- .byte 0x60
- cli
- .byte 0x66 #sizeof (IA32_REGS) = 13 * 4 = 52
- lgdt 64(%esp) #lgdt (_STK16 ptr [esp + sizeof (IA32_REGS)]).SavedGdtr
- .byte 0x66
- mov 76(%esp), %eax
- mov %rax, %cr4
- .byte 0x66
- mov $0xc0000080, %ecx
- rdmsr
- orb $1, %ah
- wrmsr
- .byte 0x66
- mov 72(%esp), %eax
- mov %rax, %cr0 #restore CR0
- .byte 0x66
- ljmpl *52(%esp)
-
-_16Idtr:
- .word 0x3ff #FWORD (1 SHL 10) - 1
- .byte 0x00
+ .byte 0x67 #test [esp + 0eh], 1\r
+ .byte 0xf7 \r
+ .byte 0x44\r
+ .byte 0x24\r
+ .byte 0x0e\r
+ .byte 0x01\r
+ .byte 0x00\r
+ jz 1f\r
+ pushfq #pushf, actually\r
+1:\r
+ .byte 0x0e #push cs\r
+ .byte 0x68 #push /iw\r
+ .word FarCallRet - _Code16Addr\r
+ jz 2f\r
+ .byte 0x66\r
+ ljmp *6(%esp)\r
+2: \r
+ .byte 0x66\r
+ ljmp *4(%esp)\r
+FarCallRet: \r
+ .byte 0x66\r
+ push $0x00 #push a dword of zero\r
+ .byte 0x66\r
+ pushf #pushfd, actually\r
+ pushq %gs\r
+ pushq %fs\r
+ .byte 0x06 #push %es\r
+ .byte 0x1e #push %ds\r
+ .byte 0x66\r
+ .byte 0x60\r
+ cli\r
+ .byte 0x66 #sizeof (IA32_REGS) = 13 * 4 = 52\r
+ lgdt 64(%esp) #lgdt (_STK16 ptr [esp + sizeof (IA32_REGS)]).SavedGdtr\r
+ .byte 0x66\r
+ mov 76(%esp), %eax\r
+ mov %rax, %cr4\r
+ .byte 0x66\r
+ mov $0xc0000080, %ecx\r
+ rdmsr\r
+ orb $1, %ah\r
+ wrmsr\r
+ .byte 0x66\r
+ mov 72(%esp), %eax\r
+ mov %rax, %cr0 #restore CR0\r
+ .byte 0x66\r
+ ljmpl *52(%esp) \r
+\r
+_16Idtr:\r
+ .word 0x3ff #FWORD (1 SHL 10) - 1\r
+ .byte 0x00\r