/sysdeps/sparc/sparc64/multiarch/memcpy.S

https://gitlab.com/Namal/glibc · Assembly · 167 lines · 139 code · 9 blank · 19 comment · 0 complexity · 9b1f39fba8ec49ca2659ab05a9e3a47c MD5 · raw file

  1. /* Multiple versions of memcpy
  2. All versions must be listed in ifunc-impl-list.c.
  3. Copyright (C) 2010-2016 Free Software Foundation, Inc.
  4. Contributed by David S. Miller (davem@davemloft.net)
  5. This file is part of the GNU C Library.
  6. The GNU C Library is free software; you can redistribute it and/or
  7. modify it under the terms of the GNU Lesser General Public
  8. License as published by the Free Software Foundation; either
  9. version 2.1 of the License, or (at your option) any later version.
  10. The GNU C Library is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  13. Lesser General Public License for more details.
  14. You should have received a copy of the GNU Lesser General Public
  15. License along with the GNU C Library; if not, see
  16. <http://www.gnu.org/licenses/>. */
  17. #include <sysdep.h>
  18. #if IS_IN (libc)
  19. .text
  20. ENTRY(memcpy)
  21. .type memcpy, @gnu_indirect_function
  22. # ifdef SHARED
  23. SETUP_PIC_REG_LEAF(o3, o5)
  24. # endif
  25. set HWCAP_SPARC_CRYPTO, %o1
  26. andcc %o0, %o1, %g0
  27. be 1f
  28. andcc %o0, HWCAP_SPARC_N2, %g0
  29. # ifdef SHARED
  30. sethi %gdop_hix22(__memcpy_niagara4), %o1
  31. xor %o1, %gdop_lox10(__memcpy_niagara4), %o1
  32. # else
  33. set __memcpy_niagara4, %o1
  34. # endif
  35. ba 10f
  36. nop
  37. 1: be 1f
  38. andcc %o0, HWCAP_SPARC_BLKINIT, %g0
  39. # ifdef SHARED
  40. sethi %gdop_hix22(__memcpy_niagara2), %o1
  41. xor %o1, %gdop_lox10(__memcpy_niagara2), %o1
  42. # else
  43. set __memcpy_niagara2, %o1
  44. # endif
  45. ba 10f
  46. nop
  47. 1: be 1f
  48. andcc %o0, HWCAP_SPARC_ULTRA3, %g0
  49. # ifdef SHARED
  50. sethi %gdop_hix22(__memcpy_niagara1), %o1
  51. xor %o1, %gdop_lox10(__memcpy_niagara1), %o1
  52. # else
  53. set __memcpy_niagara1, %o1
  54. # endif
  55. ba 10f
  56. nop
  57. 1: be 9f
  58. nop
  59. # ifdef SHARED
  60. sethi %gdop_hix22(__memcpy_ultra3), %o1
  61. xor %o1, %gdop_lox10(__memcpy_ultra3), %o1
  62. # else
  63. set __memcpy_ultra3, %o1
  64. # endif
  65. ba 10f
  66. nop
  67. 9:
  68. # ifdef SHARED
  69. sethi %gdop_hix22(__memcpy_ultra1), %o1
  70. xor %o1, %gdop_lox10(__memcpy_ultra1), %o1
  71. # else
  72. set __memcpy_ultra1, %o1
  73. # endif
  74. 10:
  75. # ifdef SHARED
  76. add %o3, %o1, %o1
  77. # endif
  78. retl
  79. mov %o1, %o0
  80. END(memcpy)
  81. ENTRY(__mempcpy)
  82. .type __mempcpy, @gnu_indirect_function
  83. # ifdef SHARED
  84. SETUP_PIC_REG_LEAF(o3, o5)
  85. # endif
  86. set HWCAP_SPARC_CRYPTO, %o1
  87. andcc %o0, %o1, %g0
  88. be 1f
  89. andcc %o0, HWCAP_SPARC_N2, %g0
  90. # ifdef SHARED
  91. sethi %gdop_hix22(__mempcpy_niagara4), %o1
  92. xor %o1, %gdop_lox10(__mempcpy_niagara4), %o1
  93. # else
  94. set __mempcpy_niagara4, %o1
  95. # endif
  96. ba 10f
  97. nop
  98. 1: be 1f
  99. andcc %o0, HWCAP_SPARC_BLKINIT, %g0
  100. # ifdef SHARED
  101. sethi %gdop_hix22(__mempcpy_niagara2), %o1
  102. xor %o1, %gdop_lox10(__mempcpy_niagara2), %o1
  103. # else
  104. set __mempcpy_niagara2, %o1
  105. # endif
  106. ba 10f
  107. nop
  108. 1: be 1f
  109. andcc %o0, HWCAP_SPARC_ULTRA3, %g0
  110. # ifdef SHARED
  111. sethi %gdop_hix22(__mempcpy_niagara1), %o1
  112. xor %o1, %gdop_lox10(__mempcpy_niagara1), %o1
  113. # else
  114. set __mempcpy_niagara1, %o1
  115. # endif
  116. ba 10f
  117. nop
  118. 1: be 9f
  119. nop
  120. # ifdef SHARED
  121. sethi %gdop_hix22(__mempcpy_ultra3), %o1
  122. xor %o1, %gdop_lox10(__mempcpy_ultra3), %o1
  123. # else
  124. set __mempcpy_ultra3, %o1
  125. # endif
  126. ba 10f
  127. nop
  128. 9:
  129. # ifdef SHARED
  130. sethi %gdop_hix22(__mempcpy_ultra1), %o1
  131. xor %o1, %gdop_lox10(__mempcpy_ultra1), %o1
  132. # else
  133. set __mempcpy_ultra1, %o1
  134. # endif
  135. 10:
  136. # ifdef SHARED
  137. add %o3, %o1, %o1
  138. # endif
  139. retl
  140. mov %o1, %o0
  141. END(__mempcpy)
  142. libc_hidden_builtin_def (memcpy)
  143. libc_hidden_def (__mempcpy)
  144. weak_alias (__mempcpy, mempcpy)
  145. libc_hidden_builtin_def (mempcpy)
  146. #undef libc_hidden_builtin_def
  147. #define libc_hidden_builtin_def(name)
  148. #undef weak_alias
  149. #define weak_alias(x, y)
  150. #undef libc_hidden_def
  151. #define libc_hidden_def(name)
  152. #define memcpy __memcpy_ultra1
  153. #define __mempcpy __mempcpy_ultra1
  154. #endif
  155. #include "../memcpy.S"