synchronousMemoryDatabase.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465
  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\
  223. \n\
  224. stq $1,24($17) \n\
  225. xor $4,$5,$5 # 5 cycles from $5 load \n\
  226. ldq $23,48($17) \n\
  227. ldq $24,48($18) \n\
  228. \n\
  229. ldq $25,48($19) \n\
  230. xor $3,$5,$5 \n\
  231. ldq $27,48($20) \n\
  232. ldq $0,56($17) \n\
  233. \n\
  234. ldq $1,56($18) \n\
  235. ldq $2,56($19) \n\
  236. xor $6,$7,$7 # 8 cycles from $6 load \n\
  237. ldq $3,56($20) \n\
  238. \n\
  239. stq $5,32($17) \n\
  240. xor $21,$22,$22 # 8 cycles from $22 load \n\
  241. xor $7,$22,$22 \n\
  242. xor $23,$24,$24 # 5 cycles from $24 load \n\
  243. \n\
  244. stq $22,40($17) \n\
  245. xor $25,$27,$27 # 5 cycles from $27 load \n\
  246. xor $24,$27,$27 \n\
  247. xor $0,$1,$1 # 5 cycles from $1 load \n\
  248. \n\
  249. stq $27,48($17) \n\
  250. xor $2,$3,$3 # 4 cycles from $3 load \n\
  251. xor $1,$3,$3 \n\
  252. subq $16,1,$16 \n\
  253. \n\
  254. stq $3,56($17) \n\
  255. addq $20,64,$20 \n\
  256. addq $19,64,$19 \n\
  257. addq $18,64,$18 \n\
  258. \n\
  259. addq $17,64,$17 \n\
  260. bgt $16,4b \n\
  261. ret \n\
  262. .end xor_alpha_4 \n\
  263. \n\
  264. .align 3 \n\
  265. .ent xor_alpha_5 \n\
  266. xor_alpha_5: \n\
  267. .prologue 0 \n\
  268. srl $16, 6, $16 \n\
  269. .align 4 \n\
  270. 5: \n\
  271. ldq $0,0($17) \n\
  272. ldq $1,0($18) \n\
  273. ldq $2,0($19) \n\
  274. ldq $3,0($20) \n\
  275. \n\
  276. ldq $4,0($21) \n\
  277. ldq $5,8($17) \n\
  278. ldq $6,8($18) \n\
  279. ldq $7,8($19) \n\
  280. \n\
  281. ldq $22,8($20) \n\
  282. ldq $23,8($21) \n\
  283. ldq $24,16($17) \n\
  284. ldq $25,16($18) \n\
  285. \n\
  286. ldq $27,16($19) \n\
  287. xor $0,$1,$1 # 6 cycles from $1 load \n\
  288. ldq $28,16($20) \n\
  289. xor $2,$3,$3 # 6 cycles from $3 load \n\
  290. \n\
  291. ldq $0,16($21) \n\
  292. xor $1,$3,$3 \n\
  293. ldq $1,24($17) \n\
  294. xor $3,$4,$4 # 7 cycles from $4 load \n\
  295. \n\
  296. stq $4,0($17) \n\
  297. xor $5,$6,$6 # 7 cycles from $6 load \n\
  298. xor $7,$22,$22 # 7 cycles from $22 load \n\
  299. xor $6,$23,$23 # 7 cycles from $23 load \n\
  300. \n\
  301. ldq $2,24($18) \n\
  302. xor $22,$23,$23 \n\
  303. ldq $3,24($19) \n\
  304. xor $24,$25,$25 # 8 cycles from $25 load \n\
  305. \n\
  306. stq $23,8($17) \n\
  307. xor $25,$27,$27 # 8 cycles from $27 load \n\
  308. ldq $4,24($20) \n\
  309. xor $28,$0,$0 # 7 cycles from $0 load \n\
  310. \n\
  311. ldq $5,24($21) \n\
  312. xor $27,$0,$0 \n\
  313. ldq $6,32($17) \n\
  314. ldq $7,32($18) \n\
  315. \n\
  316. stq $0,16($17) \n\
  317. xor $1,$2,$2 # 6 cycles from $2 load \n\
  318. ldq $22,32($19) \n\
  319. xor $3,$4,$4 # 4 cycles from $4 load \n\
  320. \n\
  321. ldq $23,32($20) \n\
  322. xor $2,$4,$4 \n\
  323. ldq $24,32($21) \n\
  324. ldq $25,40($17) \n\
  325. \n\
  326. ldq $27,40($18) \n\
  327. ldq $28,40($19) \n\
  328. ldq $0,40($20) \n\
  329. xor $4,$5,$5 # 7 cycles from $5 load \n\
  330. \n\
  331. stq $5,24($17) \n\
  332. xor $6,$7,$7 # 7 cycles from $7 load \n\
  333. ldq $1,40($21) \n\
  334. ldq $2,48($17) \n\
  335. \n\
  336. ldq $3,48($18) \n\
  337. xor $7,$22,$22 # 7 cycles from $22 load \n\
  338. ldq $4,48($19) \n\
  339. xor $23,$24,$24 # 6 cycles from $24 load \n\
  340. \n\
  341. ldq $5,48($20) \n\
  342. xor $22,$24,$24 \n\
  343. ldq $6,48($21) \n\
  344. xor $25,$27,$27 # 7 cycles from $27 load \n\
  345. \n\
  346. stq $24,32($17) \n\
  347. xor $27,$28,$28 # 8 cycles from $28 load \n\
  348. ldq $7,56($17) \n\
  349. xor $0,$1,$1 # 6 cycles from $1 load \n\
  350. \n\
  351. ldq $22,56($18) \n\
  352. ldq $23,56($19) \n\
  353. ldq $24,56($20) \n\
  354. ldq $25,56($21) \n\
  355. \n\
  356. xor $28,$1,$1 \n\
  357. xor $2,$3,$3 # 9 cycles from $3 load \n\
  358. xor $3,$4,$4 # 9 cycles from $4 load \n\
  359. xor $5,$6,$6 # 8 cycles from $6 load \n\
  360. \n\
  361. stq $1,40($17) \n\
  362. xor $4,$6,$6 \n\
  363. xor $7,$22,$22 # 7 cycles from $22 load \n\
  364. xor $23,$24,$24 # 6 cycles from $24 load \n\
  365. \n\
  366. stq $6,48($17) \n\
  367. xor $22,$24,$24 \n\
  368. subq $16,1,$16 \n\
  369. xor $24,$25,$25 # 8 cycles from $25 load \n\
  370. \n\
  371. stq $25,56($17) \n\
  372. addq $21,64,$21 \n\
  373. addq $20,64,$20 \n\
  374. addq $19,64,$19 \n\
  375. \n\
  376. addq $18,64,$18 \n\
  377. addq $17,64,$17 \n\
  378. bgt $16,5b \n\
  379. ret \n\
  380. .end xor_alpha_5 \n\
  381. \n\
  382. .align 3 \n\
  383. .ent xor_alpha_prefetch_2 \n\
  384. xor_alpha_prefetch_2: \n\
  385. .prologue 0 \n\
  386. srl $16, 6, $16 \n\
  387. \n\
  388. ldq $31, 0($17) \n\
  389. ldq $31, 0($18) \n\
  390. \n\
  391. ldq $31, 64($17) \n\
  392. ldq $31, 64($18) \n\
  393. \n\
  394. ldq $31, 128($17) \n\
  395. ldq $31, 128($18) \n\
  396. \n\
  397. ldq $31, 192($17) \n\
  398. ldq $31, 192($18) \n\
  399. .align 4 \n\
  400. 2: \n\
  401. ldq $0,0($17) \n\
  402. ldq $1,0($18) \n\
  403. ldq $2,8($17) \n\
  404. ldq $3,8($18) \n\
  405. \n\
  406. ldq $4,16($17) \n\
  407. ldq $5,16($18) \n\
  408. ldq $6,24($17) \n\
  409. ldq $7,24($18) \n\
  410. \n\
  411. ldq $19,32($17) \n\
  412. ldq $20,32($18) \n\
  413. ldq $21,40($17) \n\
  414. ldq $22,40($18) \n\
  415. \n\
  416. ldq $23,48($17) \n\
  417. ldq $24,48($18) \n\
  418. ldq $25,56($17) \n\
  419. ldq $27,56($18) \n\
  420. \n\
  421. ldq $31,256($17) \n\
  422. xor $0,$1,$0 # 8 cycles from $1 load \n\
  423. ldq $31,256($18) \n\
  424. xor $2,$3,$2 \n\
  425. \n\
  426. stq $0,0($17) \n\
  427. xor $4,$5,$4 \n\
  428. stq $2,8($17) \n\
  429. xor $6,$7,$6 \n\
  430. \n\
  431. stq $4,16($17) \n\
  432. xor $19,$20,$19 \n\
  433. stq $6,24($17) \n\
  434. xor $21,$22,$21 \n\
  435. \n\
  436. stq $19,32($17) \n\
  437. xor $23,$24,$23 \n\
  438. stq $21,40($17) \n\
  439. xor $25,$27,$25 \n\
  440. \n\
  441. stq $23,48($17) \n\
  442. subq $16,1,$16 \n\
  443. stq $25,56($17) \n\
  444. addq $17,64,$17 \n\
  445. \n\
  446. addq $18,64,$18 \n\
  447. bgt $16,2b \n\
  448. ret \n\
  449. .end xor_alpha_prefetch_2 \n\
  450. \n\
  451. .align 3 \n\
  452. .ent xor_alpha_prefetch_3 \n\
  453. xor_alpha_prefetch_3: \n\
  454. .prologue 0 \n\
  455. srl $16, 6, $16 \n\
  456. \n\
  457. ldq $31, 0($17) \n\
  458. ldq $31, 0($18) \n\
  459. ldq $31, 0($19) \n\
  460. \n\
  461. ldq $31, 64($17) \n\
  462. ldq $31, 64($18) \n\