ScanMem8.S 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. # ScanMem8.Asm
  15. #
  16. # Abstract:
  17. #
  18. # ScanMem8 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(InternalMemScanMem8)
  32. #------------------------------------------------------------------------------
  33. # CONST VOID *
  34. # EFIAPI
  35. # InternalMemScanMem8 (
  36. # IN CONST VOID *Buffer,
  37. # IN UINTN Length,
  38. # IN UINT8 Value
  39. # );
  40. #------------------------------------------------------------------------------
  41. ASM_PFX(InternalMemScanMem8):
  42. push %edi
  43. movl 12(%esp), %ecx
  44. movl 8(%esp), %edi
  45. movb 16(%esp), %al
  46. repne scasb
  47. leal -1(%edi), %eax
  48. cmovnz %ecx, %eax
  49. pop %edi
  50. ret