+#------------------------------------------------------------------------------\r
+#\r
+# Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>\r
+# 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
+#------------------------------------------------------------------------------\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# IoReadFifo8 (\r
+# IN UINTN Port, // rcx\r
+# IN UINTN Count, // rdx\r
+# IN VOID *Buffer // r8\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_GLOBAL ASM_PFX(IoReadFifo8)\r
+ASM_PFX(IoReadFifo8):\r
+ cld\r
+ xchg %rcx, %rdx\r
+ xchg %r8, %rdi # rdi: buffer address; r8: save register\r
+rep insb\r
+ mov %r8, %rdi # restore rdi\r
+ ret\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# IoReadFifo16 (\r
+# IN UINTN Port, // rcx\r
+# IN UINTN Count, // rdx\r
+# IN VOID *Buffer // r8\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_GLOBAL ASM_PFX(IoReadFifo16)\r
+ASM_PFX(IoReadFifo16):\r
+ cld\r
+ xchg %rcx, %rdx\r
+ xchg %r8, %rdi # rdi: buffer address; r8: save register\r
+rep insw\r
+ mov %r8, %rdi # restore rdi\r
+ ret\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# IoReadFifo32 (\r
+# IN UINTN Port, // rcx\r
+# IN UINTN Count, // rdx\r
+# IN VOID *Buffer // r8\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_GLOBAL ASM_PFX(IoReadFifo32)\r
+ASM_PFX(IoReadFifo32):\r
+ cld\r
+ xchg %rcx, %rdx\r
+ xchg %r8, %rdi # rdi: buffer address; r8: save register\r
+rep insl\r
+ mov %r8, %rdi # restore rdi\r
+ ret\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# IoWriteFifo8 (\r
+# IN UINTN Port, // rcx\r
+# IN UINTN Count, // rdx\r
+# IN VOID *Buffer // r8\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_GLOBAL ASM_PFX(IoWriteFifo8)\r
+ASM_PFX(IoWriteFifo8):\r
+ cld\r
+ xchg %rcx, %rdx\r
+ xchg %r8, %rsi # rsi: buffer address; r8: save register\r
+rep outsb\r
+ mov %r8, %rsi # restore rsi\r
+ ret\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# IoWriteFifo16 (\r
+# IN UINTN Port, // rcx\r
+# IN UINTN Count, // rdx\r
+# IN VOID *Buffer // r8\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_GLOBAL ASM_PFX(IoWriteFifo16)\r
+ASM_PFX(IoWriteFifo16):\r
+ cld\r
+ xchg %rcx, %rdx\r
+ xchg %r8, %rsi # rsi: buffer address; r8: save register\r
+rep outsw\r
+ mov %r8, %rsi # restore rsi\r
+ ret\r
+\r
+#------------------------------------------------------------------------------\r
+# VOID\r
+# EFIAPI\r
+# IoWriteFifo32 (\r
+# IN UINTN Port, // rcx\r
+# IN UINTN Count, // rdx\r
+# IN VOID *Buffer // r8\r
+# );\r
+#------------------------------------------------------------------------------\r
+ASM_GLOBAL ASM_PFX(IoWriteFifo32)\r
+ASM_PFX(IoWriteFifo32):\r
+ cld\r
+ xchg %rcx, %rdx\r
+ xchg %r8, %rsi # rsi: buffer address; r8: save register\r
+rep outsl\r
+ mov %r8, %rsi # restore rsi\r
+ ret\r
+\r