Memcpy_utils.S 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. #ifndef __ASM_MEMCPY_UTILS
  2. #define __ASM_MEMCPY_UTILS
  3. #include <linux/linkage.h>
  4. #include <asm/asi.h>
  5. #include <asm/visasm.h>
  6. ENTRY(__restore_asi_fp)
  7. VISExitHalf
  8. retl
  9. wr %g0, ASI_AIUS, %asi
  10. ENDPROC(__restore_asi_fp)
  11. ENTRY(__restore_asi)
  12. retl
  13. wr %g0, ASI_AIUS, %asi
  14. ENDPROC(__restore_asi)
  15. ENTRY(memcpy_retl_o2)
  16. ba,pt %xcc, __restore_asi
  17. mov %o2, %o0
  18. ENDPROC(memcpy_retl_o2)
  19. ENTRY(memcpy_retl_o2_plus_1)
  20. ba,pt %xcc, __restore_asi
  21. add %o2, 1, %o0
  22. ENDPROC(memcpy_retl_o2_plus_1)
  23. ENTRY(memcpy_retl_o2_plus_3)
  24. ba,pt %xcc, __restore_asi
  25. add %o2, 3, %o0
  26. ENDPROC(memcpy_retl_o2_plus_3)
  27. ENTRY(memcpy_retl_o2_plus_4)
  28. ba,pt %xcc, __restore_asi
  29. add %o2, 4, %o0
  30. ENDPROC(memcpy_retl_o2_plus_4)
  31. ENTRY(memcpy_retl_o2_plus_5)
  32. ba,pt %xcc, __restore_asi
  33. add %o2, 5, %o0
  34. ENDPROC(memcpy_retl_o2_plus_5)
  35. ENTRY(memcpy_retl_o2_plus_6)
  36. ba,pt %xcc, __restore_asi
  37. add %o2, 6, %o0
  38. ENDPROC(memcpy_retl_o2_plus_6)
  39. ENTRY(memcpy_retl_o2_plus_7)
  40. ba,pt %xcc, __restore_asi
  41. add %o2, 7, %o0
  42. ENDPROC(memcpy_retl_o2_plus_7)
  43. ENTRY(memcpy_retl_o2_plus_8)
  44. ba,pt %xcc, __restore_asi
  45. add %o2, 8, %o0
  46. ENDPROC(memcpy_retl_o2_plus_8)
  47. ENTRY(memcpy_retl_o2_plus_15)
  48. ba,pt %xcc, __restore_asi
  49. add %o2, 15, %o0
  50. ENDPROC(memcpy_retl_o2_plus_15)
  51. ENTRY(memcpy_retl_o2_plus_15_8)
  52. add %o2, 15, %o2
  53. ba,pt %xcc, __restore_asi
  54. add %o2, 8, %o0
  55. ENDPROC(memcpy_retl_o2_plus_15_8)
  56. ENTRY(memcpy_retl_o2_plus_16)
  57. ba,pt %xcc, __restore_asi
  58. add %o2, 16, %o0
  59. ENDPROC(memcpy_retl_o2_plus_16)
  60. ENTRY(memcpy_retl_o2_plus_24)
  61. ba,pt %xcc, __restore_asi
  62. add %o2, 24, %o0
  63. ENDPROC(memcpy_retl_o2_plus_24)
  64. ENTRY(memcpy_retl_o2_plus_31)
  65. ba,pt %xcc, __restore_asi
  66. add %o2, 31, %o0
  67. ENDPROC(memcpy_retl_o2_plus_31)
  68. ENTRY(memcpy_retl_o2_plus_32)
  69. ba,pt %xcc, __restore_asi
  70. add %o2, 32, %o0
  71. ENDPROC(memcpy_retl_o2_plus_32)
  72. ENTRY(memcpy_retl_o2_plus_31_32)
  73. add %o2, 31, %o2
  74. ba,pt %xcc, __restore_asi
  75. add %o2, 32, %o0
  76. ENDPROC(memcpy_retl_o2_plus_31_32)
  77. ENTRY(memcpy_retl_o2_plus_31_24)
  78. add %o2, 31, %o2
  79. ba,pt %xcc, __restore_asi
  80. add %o2, 24, %o0
  81. ENDPROC(memcpy_retl_o2_plus_31_24)
  82. ENTRY(memcpy_retl_o2_plus_31_16)
  83. add %o2, 31, %o2
  84. ba,pt %xcc, __restore_asi
  85. add %o2, 16, %o0
  86. ENDPROC(memcpy_retl_o2_plus_31_16)
  87. ENTRY(memcpy_retl_o2_plus_31_8)
  88. add %o2, 31, %o2
  89. ba,pt %xcc, __restore_asi
  90. add %o2, 8, %o0
  91. ENDPROC(memcpy_retl_o2_plus_31_8)
  92. ENTRY(memcpy_retl_o2_plus_63)
  93. ba,pt %xcc, __restore_asi
  94. add %o2, 63, %o0
  95. ENDPROC(memcpy_retl_o2_plus_63)
  96. ENTRY(memcpy_retl_o2_plus_63_64)
  97. add %o2, 63, %o2
  98. ba,pt %xcc, __restore_asi
  99. add %o2, 64, %o0
  100. ENDPROC(memcpy_retl_o2_plus_63_64)
  101. ENTRY(memcpy_retl_o2_plus_63_56)
  102. add %o2, 63, %o2
  103. ba,pt %xcc, __restore_asi
  104. add %o2, 56, %o0
  105. ENDPROC(memcpy_retl_o2_plus_63_56)
  106. ENTRY(memcpy_retl_o2_plus_63_48)
  107. add %o2, 63, %o2
  108. ba,pt %xcc, __restore_asi
  109. add %o2, 48, %o0
  110. ENDPROC(memcpy_retl_o2_plus_63_48)
  111. ENTRY(memcpy_retl_o2_plus_63_40)
  112. add %o2, 63, %o2
  113. ba,pt %xcc, __restore_asi
  114. add %o2, 40, %o0
  115. ENDPROC(memcpy_retl_o2_plus_63_40)
  116. ENTRY(memcpy_retl_o2_plus_63_32)
  117. add %o2, 63, %o2
  118. ba,pt %xcc, __restore_asi
  119. add %o2, 32, %o0
  120. ENDPROC(memcpy_retl_o2_plus_63_32)
  121. ENTRY(memcpy_retl_o2_plus_63_24)
  122. add %o2, 63, %o2
  123. ba,pt %xcc, __restore_asi
  124. add %o2, 24, %o0
  125. ENDPROC(memcpy_retl_o2_plus_63_24)
  126. ENTRY(memcpy_retl_o2_plus_63_16)
  127. add %o2, 63, %o2
  128. ba,pt %xcc, __restore_asi
  129. add %o2, 16, %o0
  130. ENDPROC(memcpy_retl_o2_plus_63_16)
  131. ENTRY(memcpy_retl_o2_plus_63_8)
  132. add %o2, 63, %o2
  133. ba,pt %xcc, __restore_asi
  134. add %o2, 8, %o0
  135. ENDPROC(memcpy_retl_o2_plus_63_8)
  136. ENTRY(memcpy_retl_o2_plus_o3)
  137. ba,pt %xcc, __restore_asi
  138. add %o2, %o3, %o0
  139. ENDPROC(memcpy_retl_o2_plus_o3)
  140. ENTRY(memcpy_retl_o2_plus_o3_plus_1)
  141. add %o3, 1, %o3
  142. ba,pt %xcc, __restore_asi
  143. add %o2, %o3, %o0
  144. ENDPROC(memcpy_retl_o2_plus_o3_plus_1)
  145. ENTRY(memcpy_retl_o2_plus_o5)
  146. ba,pt %xcc, __restore_asi
  147. add %o2, %o5, %o0
  148. ENDPROC(memcpy_retl_o2_plus_o5)
  149. ENTRY(memcpy_retl_o2_plus_o5_plus_1)
  150. add %o5, 1, %o5
  151. ba,pt %xcc, __restore_asi
  152. add %o2, %o5, %o0
  153. ENDPROC(memcpy_retl_o2_plus_o5_plus_1)
  154. ENTRY(memcpy_retl_o2_plus_o5_plus_4)
  155. add %o5, 4, %o5
  156. ba,pt %xcc, __restore_asi
  157. add %o2, %o5, %o0
  158. ENDPROC(memcpy_retl_o2_plus_o5_plus_4)
  159. ENTRY(memcpy_retl_o2_plus_o5_plus_8)
  160. add %o5, 8, %o5
  161. ba,pt %xcc, __restore_asi
  162. add %o2, %o5, %o0
  163. ENDPROC(memcpy_retl_o2_plus_o5_plus_8)
  164. ENTRY(memcpy_retl_o2_plus_o5_plus_16)
  165. add %o5, 16, %o5
  166. ba,pt %xcc, __restore_asi
  167. add %o2, %o5, %o0
  168. ENDPROC(memcpy_retl_o2_plus_o5_plus_16)
  169. ENTRY(memcpy_retl_o2_plus_o5_plus_24)
  170. add %o5, 24, %o5
  171. ba,pt %xcc, __restore_asi
  172. add %o2, %o5, %o0
  173. ENDPROC(memcpy_retl_o2_plus_o5_plus_24)
  174. ENTRY(memcpy_retl_o2_plus_o5_plus_32)
  175. add %o5, 32, %o5
  176. ba,pt %xcc, __restore_asi
  177. add %o2, %o5, %o0
  178. ENDPROC(memcpy_retl_o2_plus_o5_plus_32)
  179. ENTRY(memcpy_retl_o2_plus_o5_64)
  180. add %o5, 32, %o5
  181. ba,pt %xcc, __restore_asi
  182. add %o2, %o5, %o0
  183. ENDPROC(memcpy_retl_o2_plus_o5_64)
  184. ENTRY(memcpy_retl_o2_plus_g1)
  185. ba,pt %xcc, __restore_asi
  186. add %o2, %g1, %o0
  187. ENDPROC(memcpy_retl_o2_plus_g1)
  188. ENTRY(memcpy_retl_o2_plus_g1_plus_1)
  189. add %g1, 1, %g1
  190. ba,pt %xcc, __restore_asi
  191. add %o2, %g1, %o0
  192. ENDPROC(memcpy_retl_o2_plus_g1_plus_1)
  193. ENTRY(memcpy_retl_o2_plus_g1_plus_8)
  194. add %g1, 8, %g1
  195. ba,pt %xcc, __restore_asi
  196. add %o2, %g1, %o0
  197. ENDPROC(memcpy_retl_o2_plus_g1_plus_8)
  198. ENTRY(memcpy_retl_o2_plus_o4)
  199. ba,pt %xcc, __restore_asi
  200. add %o2, %o4, %o0
  201. ENDPROC(memcpy_retl_o2_plus_o4)
  202. ENTRY(memcpy_retl_o2_plus_o4_plus_8)
  203. add %o4, 8, %o4
  204. ba,pt %xcc, __restore_asi
  205. add %o2, %o4, %o0
  206. ENDPROC(memcpy_retl_o2_plus_o4_plus_8)
  207. ENTRY(memcpy_retl_o2_plus_o4_plus_16)
  208. add %o4, 16, %o4
  209. ba,pt %xcc, __restore_asi
  210. add %o2, %o4, %o0
  211. ENDPROC(memcpy_retl_o2_plus_o4_plus_16)
  212. ENTRY(memcpy_retl_o2_plus_o4_plus_24)
  213. add %o4, 24, %o4
  214. ba,pt %xcc, __restore_asi
  215. add %o2, %o4, %o0
  216. ENDPROC(memcpy_retl_o2_plus_o4_plus_24)
  217. ENTRY(memcpy_retl_o2_plus_o4_plus_32)
  218. add %o4, 32, %o4
  219. ba,pt %xcc, __restore_asi
  220. add %o2, %o4, %o0
  221. ENDPROC(memcpy_retl_o2_plus_o4_plus_32)
  222. ENTRY(memcpy_retl_o2_plus_o4_plus_40)
  223. add %o4, 40, %o4
  224. ba,pt %xcc, __restore_asi
  225. add %o2, %o4, %o0
  226. ENDPROC(memcpy_retl_o2_plus_o4_plus_40)
  227. ENTRY(memcpy_retl_o2_plus_o4_plus_48)
  228. add %o4, 48, %o4
  229. ba,pt %xcc, __restore_asi
  230. add %o2, %o4, %o0
  231. ENDPROC(memcpy_retl_o2_plus_o4_plus_48)
  232. ENTRY(memcpy_retl_o2_plus_o4_plus_56)
  233. add %o4, 56, %o4
  234. ba,pt %xcc, __restore_asi
  235. add %o2, %o4, %o0
  236. ENDPROC(memcpy_retl_o2_plus_o4_plus_56)
  237. ENTRY(memcpy_retl_o2_plus_o4_plus_64)
  238. add %o4, 64, %o4
  239. ba,pt %xcc, __restore_asi
  240. add %o2, %o4, %o0
  241. ENDPROC(memcpy_retl_o2_plus_o4_plus_64)
  242. ENTRY(memcpy_retl_o2_plus_o5_plus_64)
  243. add %o5, 64, %o5
  244. ba,pt %xcc, __restore_asi
  245. add %o2, %o5, %o0
  246. ENDPROC(memcpy_retl_o2_plus_o5_plus_64)
  247. ENTRY(memcpy_retl_o2_plus_o3_fp)
  248. ba,pt %xcc, __restore_asi_fp
  249. add %o2, %o3, %o0
  250. ENDPROC(memcpy_retl_o2_plus_o3_fp)
  251. ENTRY(memcpy_retl_o2_plus_o3_plus_1_fp)
  252. add %o3, 1, %o3
  253. ba,pt %xcc, __restore_asi_fp
  254. add %o2, %o3, %o0
  255. ENDPROC(memcpy_retl_o2_plus_o3_plus_1_fp)
  256. ENTRY(memcpy_retl_o2_plus_o3_plus_4_fp)
  257. add %o3, 4, %o3
  258. ba,pt %xcc, __restore_asi_fp
  259. add %o2, %o3, %o0
  260. ENDPROC(memcpy_retl_o2_plus_o3_plus_4_fp)
  261. ENTRY(memcpy_retl_o2_plus_o4_fp)
  262. ba,pt %xcc, __restore_asi_fp
  263. add %o2, %o4, %o0
  264. ENDPROC(memcpy_retl_o2_plus_o4_fp)
  265. ENTRY(memcpy_retl_o2_plus_o4_plus_8_fp)
  266. add %o4, 8, %o4
  267. ba,pt %xcc, __restore_asi_fp
  268. add %o2, %o4, %o0
  269. ENDPROC(memcpy_retl_o2_plus_o4_plus_8_fp)
  270. ENTRY(memcpy_retl_o2_plus_o4_plus_16_fp)
  271. add %o4, 16, %o4
  272. ba,pt %xcc, __restore_asi_fp
  273. add %o2, %o4, %o0
  274. ENDPROC(memcpy_retl_o2_plus_o4_plus_16_fp)
  275. ENTRY(memcpy_retl_o2_plus_o4_plus_24_fp)
  276. add %o4, 24, %o4
  277. ba,pt %xcc, __restore_asi_fp
  278. add %o2, %o4, %o0
  279. ENDPROC(memcpy_retl_o2_plus_o4_plus_24_fp)
  280. ENTRY(memcpy_retl_o2_plus_o4_plus_32_fp)
  281. add %o4, 32, %o4
  282. ba,pt %xcc, __restore_asi_fp
  283. add %o2, %o4, %o0
  284. ENDPROC(memcpy_retl_o2_plus_o4_plus_32_fp)
  285. ENTRY(memcpy_retl_o2_plus_o4_plus_40_fp)
  286. add %o4, 40, %o4
  287. ba,pt %xcc, __restore_asi_fp
  288. add %o2, %o4, %o0
  289. ENDPROC(memcpy_retl_o2_plus_o4_plus_40_fp)
  290. ENTRY(memcpy_retl_o2_plus_o4_plus_48_fp)
  291. add %o4, 48, %o4
  292. ba,pt %xcc, __restore_asi_fp
  293. add %o2, %o4, %o0
  294. ENDPROC(memcpy_retl_o2_plus_o4_plus_48_fp)
  295. ENTRY(memcpy_retl_o2_plus_o4_plus_56_fp)
  296. add %o4, 56, %o4
  297. ba,pt %xcc, __restore_asi_fp
  298. add %o2, %o4, %o0
  299. ENDPROC(memcpy_retl_o2_plus_o4_plus_56_fp)
  300. ENTRY(memcpy_retl_o2_plus_o4_plus_64_fp)
  301. add %o4, 64, %o4
  302. ba,pt %xcc, __restore_asi_fp
  303. add %o2, %o4, %o0
  304. ENDPROC(memcpy_retl_o2_plus_o4_plus_64_fp)
  305. ENTRY(memcpy_retl_o2_plus_o5_fp)
  306. ba,pt %xcc, __restore_asi_fp
  307. add %o2, %o5, %o0
  308. ENDPROC(memcpy_retl_o2_plus_o5_fp)
  309. ENTRY(memcpy_retl_o2_plus_o5_plus_64_fp)
  310. add %o5, 64, %o5
  311. ba,pt %xcc, __restore_asi_fp
  312. add %o2, %o5, %o0
  313. ENDPROC(memcpy_retl_o2_plus_o5_plus_64_fp)
  314. ENTRY(memcpy_retl_o2_plus_o5_plus_56_fp)
  315. add %o5, 56, %o5
  316. ba,pt %xcc, __restore_asi_fp
  317. add %o2, %o5, %o0
  318. ENDPROC(memcpy_retl_o2_plus_o5_plus_56_fp)
  319. ENTRY(memcpy_retl_o2_plus_o5_plus_48_fp)
  320. add %o5, 48, %o5
  321. ba,pt %xcc, __restore_asi_fp
  322. add %o2, %o5, %o0
  323. ENDPROC(memcpy_retl_o2_plus_o5_plus_48_fp)
  324. ENTRY(memcpy_retl_o2_plus_o5_plus_40_fp)
  325. add %o5, 40, %o5
  326. ba,pt %xcc, __restore_asi_fp
  327. add %o2, %o5, %o0
  328. ENDPROC(memcpy_retl_o2_plus_o5_plus_40_fp)
  329. ENTRY(memcpy_retl_o2_plus_o5_plus_32_fp)
  330. add %o5, 32, %o5
  331. ba,pt %xcc, __restore_asi_fp
  332. add %o2, %o5, %o0
  333. ENDPROC(memcpy_retl_o2_plus_o5_plus_32_fp)
  334. ENTRY(memcpy_retl_o2_plus_o5_plus_24_fp)
  335. add %o5, 24, %o5
  336. ba,pt %xcc, __restore_asi_fp
  337. add %o2, %o5, %o0
  338. ENDPROC(memcpy_retl_o2_plus_o5_plus_24_fp)
  339. ENTRY(memcpy_retl_o2_plus_o5_plus_16_fp)
  340. add %o5, 16, %o5
  341. ba,pt %xcc, __restore_asi_fp
  342. add %o2, %o5, %o0
  343. ENDPROC(memcpy_retl_o2_plus_o5_plus_16_fp)
  344. ENTRY(memcpy_retl_o2_plus_o5_plus_8_fp)
  345. add %o5, 8, %o5
  346. ba,pt %xcc, __restore_asi_fp
  347. add %o2, %o5, %o0
  348. ENDPROC(memcpy_retl_o2_plus_o5_plus_8_fp)
  349. #endif