ScanMem64.S 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #------------------------------------------------------------------------------
  2. #
  3. # Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
  4. # This program and the accompanying materials
  5. # are licensed and made available under the terms and conditions of the BSD License
  6. # which accompanies this distribution. The full text of the license may be found at
  7. # http://opensource.org/licenses/bsd-license.php.
  8. #
  9. # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
  10. # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
  11. #
  12. # Module Name:
  13. #
  14. # ScanMem64.Asm
  15. #
  16. # Abstract:
  17. #
  18. # ScanMem64 function
  19. #
  20. # Notes:
  21. #
  22. # The following BaseMemoryLib instances contain the same copy of this file:
  23. #
  24. # BaseMemoryLibRepStr
  25. # BaseMemoryLibMmx
  26. # BaseMemoryLibSse2
  27. # BaseMemoryLibOptDxe
  28. # BaseMemoryLibOptPei
  29. #
  30. #------------------------------------------------------------------------------
  31. ASM_GLOBAL ASM_PFX(InternalMemScanMem64)
  32. #------------------------------------------------------------------------------
  33. # CONST VOID *
  34. # EFIAPI
  35. # InternalMemScanMem64 (
  36. # IN CONST VOID *Buffer,
  37. # IN UINTN Length,
  38. # IN UINT64 Value
  39. # );
  40. #------------------------------------------------------------------------------
  41. ASM_PFX(InternalMemScanMem64):
  42. push %edi
  43. movl 12(%esp), %ecx
  44. movl 16(%esp), %eax
  45. movl 20(%esp), %edx
  46. movl 8(%esp), %edi
  47. L0:
  48. cmpl (%edi), %eax
  49. leal 8(%edi), %edi
  50. loopne L0
  51. jne L1
  52. cmpl -4(%edi), %edx
  53. jecxz L1
  54. jne L0
  55. L1:
  56. leal -8(%edi), %eax
  57. cmovne %ecx, %eax
  58. pop %edi
  59. ret