SetMem64.S 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #
  2. # ConvertAsm.py: Automatically generated from SetMem64.asm
  3. #
  4. #------------------------------------------------------------------------------
  5. #
  6. # Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
  7. # This program and the accompanying materials
  8. # are licensed and made available under the terms and conditions of the BSD License
  9. # which accompanies this distribution. The full text of the license may be found at
  10. # http://opensource.org/licenses/bsd-license.php.
  11. #
  12. # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
  13. # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
  14. #
  15. # Module Name:
  16. #
  17. # SetMem64.S
  18. #
  19. # Abstract:
  20. #
  21. # SetMem64 function
  22. #
  23. # Notes:
  24. #
  25. #------------------------------------------------------------------------------
  26. #------------------------------------------------------------------------------
  27. # VOID *
  28. # InternalMemSetMem64 (
  29. # IN VOID *Buffer,
  30. # IN UINTN Count,
  31. # IN UINT64 Value
  32. # )
  33. #------------------------------------------------------------------------------
  34. ASM_GLOBAL ASM_PFX(InternalMemSetMem64)
  35. ASM_PFX(InternalMemSetMem64):
  36. movq %rcx, %rax # rax <- Buffer
  37. xchgq %rdx, %rcx # rcx <- Count & rdx <- Buffer
  38. testb $8, %dl
  39. movd %r8, %xmm0
  40. jz L0
  41. movq %r8, (%rdx)
  42. addq $8, %rdx
  43. decq %rcx
  44. L0:
  45. shrq $1, %rcx
  46. jz L_SetQwords
  47. movlhps %xmm0, %xmm0
  48. L1:
  49. movntdq %xmm0, (%rdx)
  50. leaq 16(%rdx), %rdx
  51. loop L1
  52. mfence
  53. L_SetQwords:
  54. jnc L2
  55. movq %r8, (%rdx)
  56. L2:
  57. ret