synchronousMemoryDatabase.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. /*
  2. * include/asm-alpha/xor.h
  3. *
  4. * Optimized RAID-5 checksumming functions for alpha EV5 and EV6
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation; either version 2, or (at your option)
  9. * any later version.
  10. *
  11. * You should have received a copy of the GNU General Public License
  12. * (for example /usr/src/linux/COPYING); if not, write to the Free
  13. * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  14. */
  15. extern void xor_alpha_2(unsigned long, unsigned long *, unsigned long *);
  16. extern void xor_alpha_3(unsigned long, unsigned long *, unsigned long *,
  17. unsigned long *);
  18. extern void xor_alpha_4(unsigned long, unsigned long *, unsigned long *,
  19. unsigned long *, unsigned long *);
  20. extern void xor_alpha_5(unsigned long, unsigned long *, unsigned long *,
  21. unsigned long *, unsigned long *, unsigned long *);
  22. extern void xor_alpha_prefetch_2(unsigned long, unsigned long *,
  23. unsigned long *);
  24. extern void xor_alpha_prefetch_3(unsigned long, unsigned long *,
  25. unsigned long *, unsigned long *);
  26. extern void xor_alpha_prefetch_4(unsigned long, unsigned long *,
  27. unsigned long *, unsigned long *,
  28. unsigned long *);
  29. extern void xor_alpha_prefetch_5(unsigned long, unsigned long *,
  30. unsigned long *, unsigned long *,
  31. unsigned long *, unsigned long *);
  32. asm(" \n\
  33. .text \n\
  34. .align 3 \n\
  35. .ent xor_alpha_2 \n\
  36. xor_alpha_2: \n\
  37. .prologue 0 \n\
  38. srl $16, 6, $16 \n\
  39. .align 4 \n\
  40. 2: \n\
  41. ldq $0,0($17) \n\
  42. ldq $1,0($18) \n\
  43. ldq $2,8($17) \n\
  44. ldq $3,8($18) \n\
  45. \n\
  46. ldq $4,16($17) \n\
  47. ldq $5,16($18) \n\
  48. ldq $6,24($17) \n\
  49. ldq $7,24($18) \n\
  50. \n\
  51. ldq $19,32($17) \n\
  52. ldq $20,32($18) \n\
  53. ldq $21,40($17) \n\
  54. ldq $22,40($18) \n\
  55. \n\
  56. ldq $23,48($17) \n\
  57. ldq $24,48($18) \n\
  58. ldq $25,56($17) \n\
  59. xor $0,$1,$0 # 7 cycles from $1 load \n\
  60. \n\
  61. ldq $27,56($18) \n\
  62. xor $2,$3,$2 \n\
  63. stq $0,0($17) \n\
  64. xor $4,$5,$4 \n\
  65. \n\
  66. stq $2,8($17) \n\
  67. xor $6,$7,$6 \n\
  68. stq $4,16($17) \n\
  69. xor $19,$20,$19 \n\
  70. \n\
  71. stq $6,24($17) \n\
  72. xor $21,$22,$21 \n\
  73. stq $19,32($17) \n\
  74. xor $23,$24,$23 \n\
  75. \n\
  76. stq $21,40($17) \n\
  77. xor $25,$27,$25 \n\
  78. stq $23,48($17) \n\
  79. subq $16,1,$16 \n\
  80. \n\
  81. stq $25,56($17) \n\
  82. addq $17,64,$17 \n\
  83. addq $18,64,$18 \n\
  84. bgt $16,2b \n\
  85. \n\
  86. ret \n\
  87. .end xor_alpha_2 \n\
  88. \n\
  89. .align 3 \n\
  90. .ent xor_alpha_3 \n\
  91. xor_alpha_3: \n\
  92. .prologue 0 \n\
  93. srl $16, 6, $16 \n\
  94. .align 4 \n\
  95. 3: \n\
  96. ldq $0,0($17) \n\
  97. ldq $1,0($18) \n\
  98. ldq $2,0($19) \n\
  99. ldq $3,8($17) \n\
  100. \n\
  101. ldq $4,8($18) \n\
  102. ldq $6,16($17) \n\
  103. ldq $7,16($18) \n\
  104. ldq $21,24($17) \n\
  105. \n\
  106. ldq $22,24($18) \n\
  107. ldq $24,32($17) \n\
  108. ldq $25,32($18) \n\
  109. ldq $5,8($19) \n\
  110. \n\
  111. ldq $20,16($19) \n\
  112. ldq $23,24($19) \n\
  113. ldq $27,32($19) \n\
  114. nop \n\
  115. \n\
  116. xor $0,$1,$1 # 8 cycles from $0 load \n\
  117. xor $3,$4,$4 # 6 cycles from $4 load \n\
  118. xor $6,$7,$7 # 6 cycles from $7 load \n\
  119. xor $21,$22,$22 # 5 cycles from $22 load \n\
  120. \n\
  121. xor $1,$2,$2 # 9 cycles from $2 load \n\
  122. xor $24,$25,$25 # 5 cycles from $25 load \n\
  123. stq $2,0($17) \n\
  124. xor $4,$5,$5 # 6 cycles from $5 load \n\
  125. \n\
  126. stq $5,8($17) \n\
  127. xor $7,$20,$20 # 7 cycles from $20 load \n\
  128. stq $20,16($17) \n\
  129. xor $22,$23,$23 # 7 cycles from $23 load \n\
  130. \n\
  131. stq $23,24($17) \n\
  132. xor $25,$27,$27 # 7 cycles from $27 load \n\
  133. stq $27,32($17) \n\
  134. nop \n\
  135. \n\
  136. ldq $0,40($17) \n\
  137. ldq $1,40($18) \n\
  138. ldq $3,48($17) \n\
  139. ldq $4,48($18) \n\
  140. \n\
  141. ldq $6,56($17) \n\
  142. ldq $7,56($18) \n\
  143. ldq $2,40($19) \n\
  144. ldq $5,48($19) \n\
  145. \n\
  146. ldq $20,56($19) \n\
  147. xor $0,$1,$1 # 4 cycles from $1 load \n\
  148. xor $3,$4,$4 # 5 cycles from $4 load \n\
  149. xor $6,$7,$7 # 5 cycles from $7 load \n\
  150. \n\
  151. xor $1,$2,$2 # 4 cycles from $2 load \n\
  152. xor $4,$5,$5 # 5 cycles from $5 load \n\
  153. stq $2,40($17) \n\
  154. xor $7,$20,$20 # 4 cycles from $20 load \n\
  155. \n\
  156. stq $5,48($17) \n\
  157. subq $16,1,$16 \n\
  158. stq $20,56($17) \n\
  159. addq $19,64,$19 \n\
  160. \n\
  161. addq $18,64,$18 \n\
  162. addq $17,64,$17 \n\
  163. bgt $16,3b \n\
  164. ret \n\
  165. .end xor_alpha_3 \n\
  166. \n\
  167. .align 3 \n\
  168. .ent xor_alpha_4 \n\
  169. xor_alpha_4: \n\
  170. .prologue 0 \n\
  171. srl $16, 6, $16 \n\
  172. .align 4 \n\
  173. 4: \n\
  174. ldq $0,0($17) \n\
  175. ldq $1,0($18) \n\
  176. ldq $2,0($19) \n\
  177. ldq $3,0($20) \n\
  178. \n\
  179. ldq $4,8($17) \n\
  180. ldq $5,8($18) \n\
  181. ldq $6,8($19) \n\
  182. ldq $7,8($20) \n\
  183. \n\
  184. ldq $21,16($17) \n\
  185. ldq $22,16($18) \n\
  186. ldq $23,16($19) \n\
  187. ldq $24,16($20) \n\
  188. \n\
  189. ldq $25,24($17) \n\
  190. xor $0,$1,$1 # 6 cycles from $1 load \n\
  191. ldq $27,24($18) \n\
  192. xor $2,$3,$3 # 6 cycles from $3 load \n\
  193. \n\
  194. ldq $0,24($19) \n\
  195. xor $1,$3,$3 \n\
  196. ldq $1,24($20) \n\
  197. xor $4,$5,$5 # 7 cycles from $5 load \n\
  198. \n\
  199. stq $3,0($17) \n\
  200. xor $6,$7,$7 \n\
  201. xor $21,$22,$22 # 7 cycles from $22 load \n\
  202. xor $5,$7,$7 \n\
  203. \n\
  204. stq $7,8($17) \n\
  205. xor $23,$24,$24 # 7 cycles from $24 load \n\
  206. ldq $2,32($17) \n\
  207. xor $22,$24,$24 \n\
  208. \n\
  209. ldq $3,32($18) \n\
  210. ldq $4,32($19) \n\
  211. ldq $5,32($20) \n\
  212. xor $25,$27,$27 # 8 cycles from $27 load \n\
  213. \n\
  214. ldq $6,40($17) \n\
  215. ldq $7,40($18) \n\
  216. ldq $21,40($19) \n\
  217. ldq $22,40($20) \n\
  218. \n\
  219. stq $24,16($17) \n\
  220. xor $0,$1,$1 # 9 cycles from $1 load \n\
  221. xor $2,$3,$3 # 5 cycles from $3 load \n\
  222. xor $27,$1,$1 \n\