xor.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:15k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  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("
  33. .text
  34. .align 3
  35. .ent xor_alpha_2
  36. xor_alpha_2:
  37. .prologue 0
  38. srl $16, 6, $16
  39. .align 4
  40. 2:
  41. ldq $0,0($17)
  42. ldq $1,0($18)
  43. ldq $2,8($17)
  44. ldq $3,8($18)
  45. ldq $4,16($17)
  46. ldq $5,16($18)
  47. ldq $6,24($17)
  48. ldq $7,24($18)
  49. ldq $19,32($17)
  50. ldq $20,32($18)
  51. ldq $21,40($17)
  52. ldq $22,40($18)
  53. ldq $23,48($17)
  54. ldq $24,48($18)
  55. ldq $25,56($17)
  56. xor $0,$1,$0 # 7 cycles from $1 load
  57. ldq $27,56($18)
  58. xor $2,$3,$2
  59. stq $0,0($17)
  60. xor $4,$5,$4
  61. stq $2,8($17)
  62. xor $6,$7,$6
  63. stq $4,16($17)
  64. xor $19,$20,$19
  65. stq $6,24($17)
  66. xor $21,$22,$21
  67. stq $19,32($17)
  68. xor $23,$24,$23
  69. stq $21,40($17)
  70. xor $25,$27,$25
  71. stq $23,48($17)
  72. subq $16,1,$16
  73. stq $25,56($17)
  74. addq $17,64,$17
  75. addq $18,64,$18
  76. bgt $16,2b
  77. ret
  78. .end xor_alpha_2
  79. .align 3
  80. .ent xor_alpha_3
  81. xor_alpha_3:
  82. .prologue 0
  83. srl $16, 6, $16
  84. .align 4
  85. 3:
  86. ldq $0,0($17)
  87. ldq $1,0($18)
  88. ldq $2,0($19)
  89. ldq $3,8($17)
  90. ldq $4,8($18)
  91. ldq $6,16($17)
  92. ldq $7,16($18)
  93. ldq $21,24($17)
  94. ldq $22,24($18)
  95. ldq $24,32($17)
  96. ldq $25,32($18)
  97. ldq $5,8($19)
  98. ldq $20,16($19)
  99. ldq $23,24($19)
  100. ldq $27,32($19)
  101. nop
  102. xor $0,$1,$1 # 8 cycles from $0 load
  103. xor $3,$4,$4 # 6 cycles from $4 load
  104. xor $6,$7,$7 # 6 cycles from $7 load
  105. xor $21,$22,$22 # 5 cycles from $22 load
  106. xor $1,$2,$2 # 9 cycles from $2 load
  107. xor $24,$25,$25 # 5 cycles from $25 load
  108. stq $2,0($17)
  109. xor $4,$5,$5 # 6 cycles from $5 load
  110. stq $5,8($17)
  111. xor $7,$20,$20 # 7 cycles from $20 load
  112. stq $20,16($17)
  113. xor $22,$23,$23 # 7 cycles from $23 load
  114. stq $23,24($17)
  115. xor $25,$27,$27 # 7 cycles from $27 load
  116. stq $27,32($17)
  117. nop
  118. ldq $0,40($17)
  119. ldq $1,40($18)
  120. ldq $3,48($17)
  121. ldq $4,48($18)
  122. ldq $6,56($17)
  123. ldq $7,56($18)
  124. ldq $2,40($19)
  125. ldq $5,48($19)
  126. ldq $20,56($19)
  127. xor $0,$1,$1 # 4 cycles from $1 load
  128. xor $3,$4,$4 # 5 cycles from $4 load
  129. xor $6,$7,$7 # 5 cycles from $7 load
  130. xor $1,$2,$2 # 4 cycles from $2 load
  131. xor $4,$5,$5 # 5 cycles from $5 load
  132. stq $2,40($17)
  133. xor $7,$20,$20 # 4 cycles from $20 load
  134. stq $5,48($17)
  135. subq $16,1,$16
  136. stq $20,56($17)
  137. addq $19,64,$19
  138. addq $18,64,$18
  139. addq $17,64,$17
  140. bgt $16,3b
  141. ret
  142. .end xor_alpha_3
  143. .align 3
  144. .ent xor_alpha_4
  145. xor_alpha_4:
  146. .prologue 0
  147. srl $16, 6, $16
  148. .align 4
  149. 4:
  150. ldq $0,0($17)
  151. ldq $1,0($18)
  152. ldq $2,0($19)
  153. ldq $3,0($20)
  154. ldq $4,8($17)
  155. ldq $5,8($18)
  156. ldq $6,8($19)
  157. ldq $7,8($20)
  158. ldq $21,16($17)
  159. ldq $22,16($18)
  160. ldq $23,16($19)
  161. ldq $24,16($20)
  162. ldq $25,24($17)
  163. xor $0,$1,$1 # 6 cycles from $1 load
  164. ldq $27,24($18)
  165. xor $2,$3,$3 # 6 cycles from $3 load
  166. ldq $0,24($19)
  167. xor $1,$3,$3
  168. ldq $1,24($20)
  169. xor $4,$5,$5 # 7 cycles from $5 load
  170. stq $3,0($17)
  171. xor $6,$7,$7
  172. xor $21,$22,$22 # 7 cycles from $22 load
  173. xor $5,$7,$7
  174. stq $7,8($17)
  175. xor $23,$24,$24 # 7 cycles from $24 load
  176. ldq $2,32($17)
  177. xor $22,$24,$24
  178. ldq $3,32($18)
  179. ldq $4,32($19)
  180. ldq $5,32($20)
  181. xor $25,$27,$27 # 8 cycles from $27 load
  182. ldq $6,40($17)
  183. ldq $7,40($18)
  184. ldq $21,40($19)
  185. ldq $22,40($20)
  186. stq $24,16($17)
  187. xor $0,$1,$1 # 9 cycles from $1 load
  188. xor $2,$3,$3 # 5 cycles from $3 load
  189. xor $27,$1,$1
  190. stq $1,24($17)
  191. xor $4,$5,$5 # 5 cycles from $5 load
  192. ldq $23,48($17)
  193. ldq $24,48($18)
  194. ldq $25,48($19)
  195. xor $3,$5,$5
  196. ldq $27,48($20)
  197. ldq $0,56($17)
  198. ldq $1,56($18)
  199. ldq $2,56($19)
  200. xor $6,$7,$7 # 8 cycles from $6 load
  201. ldq $3,56($20)
  202. stq $5,32($17)
  203. xor $21,$22,$22 # 8 cycles from $22 load
  204. xor $7,$22,$22
  205. xor $23,$24,$24 # 5 cycles from $24 load
  206. stq $22,40($17)
  207. xor $25,$27,$27 # 5 cycles from $27 load
  208. xor $24,$27,$27
  209. xor $0,$1,$1 # 5 cycles from $1 load
  210. stq $27,48($17)
  211. xor $2,$3,$3 # 4 cycles from $3 load
  212. xor $1,$3,$3
  213. subq $16,1,$16
  214. stq $3,56($17)
  215. addq $20,64,$20
  216. addq $19,64,$19
  217. addq $18,64,$18
  218. addq $17,64,$17
  219. bgt $16,4b
  220. ret
  221. .end xor_alpha_4
  222. .align 3
  223. .ent xor_alpha_5
  224. xor_alpha_5:
  225. .prologue 0
  226. srl $16, 6, $16
  227. .align 4
  228. 5:
  229. ldq $0,0($17)
  230. ldq $1,0($18)
  231. ldq $2,0($19)
  232. ldq $3,0($20)
  233. ldq $4,0($21)
  234. ldq $5,8($17)
  235. ldq $6,8($18)
  236. ldq $7,8($19)
  237. ldq $22,8($20)
  238. ldq $23,8($21)
  239. ldq $24,16($17)
  240. ldq $25,16($18)
  241. ldq $27,16($19)
  242. xor $0,$1,$1 # 6 cycles from $1 load
  243. ldq $28,16($20)
  244. xor $2,$3,$3 # 6 cycles from $3 load
  245. ldq $0,16($21)
  246. xor $1,$3,$3
  247. ldq $1,24($17)
  248. xor $3,$4,$4 # 7 cycles from $4 load
  249. stq $4,0($17)
  250. xor $5,$6,$6 # 7 cycles from $6 load
  251. xor $7,$22,$22 # 7 cycles from $22 load
  252. xor $6,$23,$23 # 7 cycles from $23 load
  253. ldq $2,24($18)
  254. xor $22,$23,$23
  255. ldq $3,24($19)
  256. xor $24,$25,$25 # 8 cycles from $25 load
  257. stq $23,8($17)
  258. xor $25,$27,$27 # 8 cycles from $27 load
  259. ldq $4,24($20)
  260. xor $28,$0,$0 # 7 cycles from $0 load
  261. ldq $5,24($21)
  262. xor $27,$0,$0
  263. ldq $6,32($17)
  264. ldq $7,32($18)
  265. stq $0,16($17)
  266. xor $1,$2,$2 # 6 cycles from $2 load
  267. ldq $22,32($19)
  268. xor $3,$4,$4 # 4 cycles from $4 load
  269. ldq $23,32($20)
  270. xor $2,$4,$4
  271. ldq $24,32($21)
  272. ldq $25,40($17)
  273. ldq $27,40($18)
  274. ldq $28,40($19)
  275. ldq $0,40($20)
  276. xor $4,$5,$5 # 7 cycles from $5 load
  277. stq $5,24($17)
  278. xor $6,$7,$7 # 7 cycles from $7 load
  279. ldq $1,40($21)
  280. ldq $2,48($17)
  281. ldq $3,48($18)
  282. xor $7,$22,$22 # 7 cycles from $22 load
  283. ldq $4,48($19)
  284. xor $23,$24,$24 # 6 cycles from $24 load
  285. ldq $5,48($20)
  286. xor $22,$24,$24
  287. ldq $6,48($21)
  288. xor $25,$27,$27 # 7 cycles from $27 load
  289. stq $24,32($17)
  290. xor $27,$28,$28 # 8 cycles from $28 load
  291. ldq $7,56($17)
  292. xor $0,$1,$1 # 6 cycles from $1 load
  293. ldq $22,56($18)
  294. ldq $23,56($19)
  295. ldq $24,56($20)
  296. ldq $25,56($21)
  297. xor $28,$1,$1
  298. xor $2,$3,$3 # 9 cycles from $3 load
  299. xor $3,$4,$4 # 9 cycles from $4 load
  300. xor $5,$6,$6 # 8 cycles from $6 load
  301. stq $1,40($17)
  302. xor $4,$6,$6
  303. xor $7,$22,$22 # 7 cycles from $22 load
  304. xor $23,$24,$24 # 6 cycles from $24 load
  305. stq $6,48($17)
  306. xor $22,$24,$24
  307. subq $16,1,$16
  308. xor $24,$25,$25 # 8 cycles from $25 load
  309. stq $25,56($17)
  310. addq $21,64,$21
  311. addq $20,64,$20
  312. addq $19,64,$19
  313. addq $18,64,$18
  314. addq $17,64,$17
  315. bgt $16,5b
  316. ret
  317. .end xor_alpha_5
  318. .align 3
  319. .ent xor_alpha_prefetch_2
  320. xor_alpha_prefetch_2:
  321. .prologue 0
  322. srl $16, 6, $16
  323. ldq $31, 0($17)
  324. ldq $31, 0($18)
  325. ldq $31, 64($17)
  326. ldq $31, 64($18)
  327. ldq $31, 128($17)
  328. ldq $31, 128($18)
  329. ldq $31, 192($17)
  330. ldq $31, 192($18)
  331. .align 4
  332. 2:
  333. ldq $0,0($17)
  334. ldq $1,0($18)
  335. ldq $2,8($17)
  336. ldq $3,8($18)
  337. ldq $4,16($17)
  338. ldq $5,16($18)
  339. ldq $6,24($17)
  340. ldq $7,24($18)
  341. ldq $19,32($17)
  342. ldq $20,32($18)
  343. ldq $21,40($17)
  344. ldq $22,40($18)
  345. ldq $23,48($17)
  346. ldq $24,48($18)
  347. ldq $25,56($17)
  348. ldq $27,56($18)
  349. ldq $31,256($17)
  350. xor $0,$1,$0 # 8 cycles from $1 load
  351. ldq $31,256($18)
  352. xor $2,$3,$2
  353. stq $0,0($17)
  354. xor $4,$5,$4
  355. stq $2,8($17)
  356. xor $6,$7,$6
  357. stq $4,16($17)
  358. xor $19,$20,$19
  359. stq $6,24($17)
  360. xor $21,$22,$21
  361. stq $19,32($17)
  362. xor $23,$24,$23
  363. stq $21,40($17)
  364. xor $25,$27,$25
  365. stq $23,48($17)
  366. subq $16,1,$16
  367. stq $25,56($17)
  368. addq $17,64,$17
  369. addq $18,64,$18
  370. bgt $16,2b
  371. ret
  372. .end xor_alpha_prefetch_2
  373. .align 3
  374. .ent xor_alpha_prefetch_3
  375. xor_alpha_prefetch_3:
  376. .prologue 0
  377. srl $16, 6, $16
  378. ldq $31, 0($17)
  379. ldq $31, 0($18)
  380. ldq $31, 0($19)
  381. ldq $31, 64($17)
  382. ldq $31, 64($18)
  383. ldq $31, 64($19)
  384. ldq $31, 128($17)
  385. ldq $31, 128($18)
  386. ldq $31, 128($19)
  387. ldq $31, 192($17)
  388. ldq $31, 192($18)
  389. ldq $31, 192($19)
  390. .align 4
  391. 3:
  392. ldq $0,0($17)
  393. ldq $1,0($18)
  394. ldq $2,0($19)
  395. ldq $3,8($17)
  396. ldq $4,8($18)
  397. ldq $6,16($17)
  398. ldq $7,16($18)
  399. ldq $21,24($17)
  400. ldq $22,24($18)
  401. ldq $24,32($17)
  402. ldq $25,32($18)
  403. ldq $5,8($19)
  404. ldq $20,16($19)
  405. ldq $23,24($19)
  406. ldq $27,32($19)
  407. nop
  408. xor $0,$1,$1 # 8 cycles from $0 load
  409. xor $3,$4,$4 # 7 cycles from $4 load
  410. xor $6,$7,$7 # 6 cycles from $7 load
  411. xor $21,$22,$22 # 5 cycles from $22 load
  412. xor $1,$2,$2 # 9 cycles from $2 load
  413. xor $24,$25,$25 # 5 cycles from $25 load
  414. stq $2,0($17)
  415. xor $4,$5,$5 # 6 cycles from $5 load
  416. stq $5,8($17)
  417. xor $7,$20,$20 # 7 cycles from $20 load
  418. stq $20,16($17)
  419. xor $22,$23,$23 # 7 cycles from $23 load
  420. stq $23,24($17)
  421. xor $25,$27,$27 # 7 cycles from $27 load
  422. stq $27,32($17)
  423. nop
  424. ldq $0,40($17)
  425. ldq $1,40($18)
  426. ldq $3,48($17)
  427. ldq $4,48($18)
  428. ldq $6,56($17)
  429. ldq $7,56($18)
  430. ldq $2,40($19)
  431. ldq $5,48($19)
  432. ldq $20,56($19)
  433. ldq $31,256($17)
  434. ldq $31,256($18)
  435. ldq $31,256($19)
  436. xor $0,$1,$1 # 6 cycles from $1 load
  437. xor $3,$4,$4 # 5 cycles from $4 load
  438. xor $6,$7,$7 # 5 cycles from $7 load
  439. xor $1,$2,$2 # 4 cycles from $2 load
  440. xor $4,$5,$5 # 5 cycles from $5 load
  441. xor $7,$20,$20 # 4 cycles from $20 load
  442. stq $2,40($17)
  443. subq $16,1,$16
  444. stq $5,48($17)
  445. addq $19,64,$19
  446. stq $20,56($17)
  447. addq $18,64,$18
  448. addq $17,64,$17
  449. bgt $16,3b
  450. ret
  451. .end xor_alpha_prefetch_3
  452. .align 3
  453. .ent xor_alpha_prefetch_4
  454. xor_alpha_prefetch_4:
  455. .prologue 0
  456. srl $16, 6, $16
  457. ldq $31, 0($17)
  458. ldq $31, 0($18)
  459. ldq $31, 0($19)
  460. ldq $31, 0($20)
  461. ldq $31, 64($17)
  462. ldq $31, 64($18)
  463. ldq $31, 64($19)
  464. ldq $31, 64($20)
  465. ldq $31, 128($17)
  466. ldq $31, 128($18)
  467. ldq $31, 128($19)
  468. ldq $31, 128($20)
  469. ldq $31, 192($17)
  470. ldq $31, 192($18)
  471. ldq $31, 192($19)
  472. ldq $31, 192($20)
  473. .align 4
  474. 4:
  475. ldq $0,0($17)
  476. ldq $1,0($18)
  477. ldq $2,0($19)
  478. ldq $3,0($20)
  479. ldq $4,8($17)
  480. ldq $5,8($18)
  481. ldq $6,8($19)
  482. ldq $7,8($20)
  483. ldq $21,16($17)
  484. ldq $22,16($18)
  485. ldq $23,16($19)
  486. ldq $24,16($20)
  487. ldq $25,24($17)
  488. xor $0,$1,$1 # 6 cycles from $1 load
  489. ldq $27,24($18)
  490. xor $2,$3,$3 # 6 cycles from $3 load
  491. ldq $0,24($19)
  492. xor $1,$3,$3
  493. ldq $1,24($20)
  494. xor $4,$5,$5 # 7 cycles from $5 load
  495. stq $3,0($17)
  496. xor $6,$7,$7
  497. xor $21,$22,$22 # 7 cycles from $22 load
  498. xor $5,$7,$7
  499. stq $7,8($17)
  500. xor $23,$24,$24 # 7 cycles from $24 load
  501. ldq $2,32($17)
  502. xor $22,$24,$24
  503. ldq $3,32($18)
  504. ldq $4,32($19)
  505. ldq $5,32($20)
  506. xor $25,$27,$27 # 8 cycles from $27 load
  507. ldq $6,40($17)
  508. ldq $7,40($18)
  509. ldq $21,40($19)
  510. ldq $22,40($20)
  511. stq $24,16($17)
  512. xor $0,$1,$1 # 9 cycles from $1 load
  513. xor $2,$3,$3 # 5 cycles from $3 load
  514. xor $27,$1,$1
  515. stq $1,24($17)
  516. xor $4,$5,$5 # 5 cycles from $5 load
  517. ldq $23,48($17)
  518. xor $3,$5,$5
  519. ldq $24,48($18)
  520. ldq $25,48($19)
  521. ldq $27,48($20)
  522. ldq $0,56($17)
  523. ldq $1,56($18)
  524. ldq $2,56($19)
  525. ldq $3,56($20)
  526. xor $6,$7,$7 # 8 cycles from $6 load
  527. ldq $31,256($17)
  528. xor $21,$22,$22 # 8 cycles from $22 load
  529. ldq $31,256($18)
  530. xor $7,$22,$22
  531. ldq $31,256($19)
  532. xor $23,$24,$24 # 6 cycles from $24 load
  533. ldq $31,256($20)
  534. xor $25,$27,$27 # 6 cycles from $27 load
  535. stq $5,32($17)
  536. xor $24,$27,$27
  537. xor $0,$1,$1 # 7 cycles from $1 load
  538. xor $2,$3,$3 # 6 cycles from $3 load
  539. stq $22,40($17)
  540. xor $1,$3,$3
  541. stq $27,48($17)
  542. subq $16,1,$16
  543. stq $3,56($17)
  544. addq $20,64,$20
  545. addq $19,64,$19
  546. addq $18,64,$18
  547. addq $17,64,$17
  548. bgt $16,4b
  549. ret
  550. .end xor_alpha_prefetch_4
  551. .align 3
  552. .ent xor_alpha_prefetch_5
  553. xor_alpha_prefetch_5:
  554. .prologue 0
  555. srl $16, 6, $16
  556. ldq $31, 0($17)
  557. ldq $31, 0($18)
  558. ldq $31, 0($19)
  559. ldq $31, 0($20)
  560. ldq $31, 0($21)
  561. ldq $31, 64($17)
  562. ldq $31, 64($18)
  563. ldq $31, 64($19)
  564. ldq $31, 64($20)
  565. ldq $31, 64($21)
  566. ldq $31, 128($17)
  567. ldq $31, 128($18)
  568. ldq $31, 128($19)
  569. ldq $31, 128($20)
  570. ldq $31, 128($21)
  571. ldq $31, 192($17)
  572. ldq $31, 192($18)
  573. ldq $31, 192($19)
  574. ldq $31, 192($20)
  575. ldq $31, 192($21)
  576. .align 4
  577. 5:
  578. ldq $0,0($17)
  579. ldq $1,0($18)
  580. ldq $2,0($19)
  581. ldq $3,0($20)
  582. ldq $4,0($21)
  583. ldq $5,8($17)
  584. ldq $6,8($18)
  585. ldq $7,8($19)
  586. ldq $22,8($20)
  587. ldq $23,8($21)
  588. ldq $24,16($17)
  589. ldq $25,16($18)
  590. ldq $27,16($19)
  591. xor $0,$1,$1 # 6 cycles from $1 load
  592. ldq $28,16($20)
  593. xor $2,$3,$3 # 6 cycles from $3 load
  594. ldq $0,16($21)
  595. xor $1,$3,$3
  596. ldq $1,24($17)
  597. xor $3,$4,$4 # 7 cycles from $4 load
  598. stq $4,0($17)
  599. xor $5,$6,$6 # 7 cycles from $6 load
  600. xor $7,$22,$22 # 7 cycles from $22 load
  601. xor $6,$23,$23 # 7 cycles from $23 load
  602. ldq $2,24($18)
  603. xor $22,$23,$23
  604. ldq $3,24($19)
  605. xor $24,$25,$25 # 8 cycles from $25 load
  606. stq $23,8($17)
  607. xor $25,$27,$27 # 8 cycles from $27 load
  608. ldq $4,24($20)
  609. xor $28,$0,$0 # 7 cycles from $0 load
  610. ldq $5,24($21)
  611. xor $27,$0,$0
  612. ldq $6,32($17)
  613. ldq $7,32($18)
  614. stq $0,16($17)
  615. xor $1,$2,$2 # 6 cycles from $2 load
  616. ldq $22,32($19)
  617. xor $3,$4,$4 # 4 cycles from $4 load
  618. ldq $23,32($20)
  619. xor $2,$4,$4
  620. ldq $24,32($21)
  621. ldq $25,40($17)
  622. ldq $27,40($18)
  623. ldq $28,40($19)
  624. ldq $0,40($20)
  625. xor $4,$5,$5 # 7 cycles from $5 load
  626. stq $5,24($17)
  627. xor $6,$7,$7 # 7 cycles from $7 load
  628. ldq $1,40($21)
  629. ldq $2,48($17)
  630. ldq $3,48($18)
  631. xor $7,$22,$22 # 7 cycles from $22 load
  632. ldq $4,48($19)
  633. xor $23,$24,$24 # 6 cycles from $24 load
  634. ldq $5,48($20)
  635. xor $22,$24,$24
  636. ldq $6,48($21)
  637. xor $25,$27,$27 # 7 cycles from $27 load
  638. stq $24,32($17)
  639. xor $27,$28,$28 # 8 cycles from $28 load
  640. ldq $7,56($17)
  641. xor $0,$1,$1 # 6 cycles from $1 load
  642. ldq $22,56($18)
  643. ldq $23,56($19)
  644. ldq $24,56($20)
  645. ldq $25,56($21)
  646. ldq $31,256($17)
  647. xor $28,$1,$1
  648. ldq $31,256($18)
  649. xor $2,$3,$3 # 9 cycles from $3 load
  650. ldq $31,256($19)
  651. xor $3,$4,$4 # 9 cycles from $4 load
  652. ldq $31,256($20)
  653. xor $5,$6,$6 # 8 cycles from $6 load
  654. stq $1,40($17)
  655. xor $4,$6,$6
  656. xor $7,$22,$22 # 7 cycles from $22 load
  657. xor $23,$24,$24 # 6 cycles from $24 load
  658. stq $6,48($17)
  659. xor $22,$24,$24
  660. ldq $31,256($21)
  661. xor $24,$25,$25 # 8 cycles from $25 load
  662. stq $25,56($17)
  663. subq $16,1,$16
  664. addq $21,64,$21
  665. addq $20,64,$20
  666. addq $19,64,$19
  667. addq $18,64,$18
  668. addq $17,64,$17
  669. bgt $16,5b
  670. ret
  671. .end xor_alpha_prefetch_5
  672. ");
  673. static struct xor_block_template xor_block_alpha = {
  674. name: "alpha",
  675. do_2: xor_alpha_2,
  676. do_3: xor_alpha_3,
  677. do_4: xor_alpha_4,
  678. do_5: xor_alpha_5,
  679. };
  680. static struct xor_block_template xor_block_alpha_prefetch = {
  681. name: "alpha prefetch",
  682. do_2: xor_alpha_prefetch_2,
  683. do_3: xor_alpha_prefetch_3,
  684. do_4: xor_alpha_prefetch_4,
  685. do_5: xor_alpha_prefetch_5,
  686. };
  687. /* For grins, also test the generic routines.  */
  688. #include <asm-generic/xor.h>
  689. #undef XOR_TRY_TEMPLATES
  690. #define XOR_TRY_TEMPLATES
  691. do {
  692. xor_speed(&xor_block_8regs);
  693. xor_speed(&xor_block_32regs);
  694. xor_speed(&xor_block_alpha);
  695. xor_speed(&xor_block_alpha_prefetch);
  696. } while (0)
  697. /* Force the use of alpha_prefetch if EV6, as it is significantly
  698.    faster in the cold cache case.  */
  699. #define XOR_SELECT_TEMPLATE(FASTEST) 
  700. (implver() == IMPLVER_EV6 ? &xor_block_alpha_prefetch : FASTEST)