You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

gemm_tcopy_hummer_8.S 23 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285
  1. /*********************************************************************/
  2. /* Copyright 2009, 2010 The University of Texas at Austin. */
  3. /* All rights reserved. */
  4. /* */
  5. /* Redistribution and use in source and binary forms, with or */
  6. /* without modification, are permitted provided that the following */
  7. /* conditions are met: */
  8. /* */
  9. /* 1. Redistributions of source code must retain the above */
  10. /* copyright notice, this list of conditions and the following */
  11. /* disclaimer. */
  12. /* */
  13. /* 2. Redistributions in binary form must reproduce the above */
  14. /* copyright notice, this list of conditions and the following */
  15. /* disclaimer in the documentation and/or other materials */
  16. /* provided with the distribution. */
  17. /* */
  18. /* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */
  19. /* AUSTIN ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, */
  20. /* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
  21. /* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */
  22. /* DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF TEXAS AT */
  23. /* AUSTIN OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, */
  24. /* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES */
  25. /* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE */
  26. /* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR */
  27. /* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF */
  28. /* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */
  29. /* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT */
  30. /* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
  31. /* POSSIBILITY OF SUCH DAMAGE. */
  32. /* */
  33. /* The views and conclusions contained in the software and */
  34. /* documentation are those of the authors and should not be */
  35. /* interpreted as representing official policies, either expressed */
  36. /* or implied, of The University of Texas at Austin. */
  37. /*********************************************************************/
  38. #define ASSEMBLER
  39. #include "common.h"
  40. #define M r3
  41. #define N r4
  42. #define A r5
  43. #define LDA r6
  44. #define B r7
  45. #define AO1 r8
  46. #define AO2 r9
  47. #define AO3 r10
  48. #define AO4 r11
  49. #define J r12
  50. #define B1 r21
  51. #define B2 r22
  52. #define B3 r23
  53. #define B4 r24
  54. #define M8 r25
  55. #define AO5 r26
  56. #define AO6 r27
  57. #define AO7 r28
  58. #define AO8 r29
  59. #define INC r30
  60. #define INC2 r31
  61. #define c01 f0
  62. #define c02 f1
  63. #define c03 f2
  64. #define c04 f3
  65. #define c05 f4
  66. #define c06 f5
  67. #define c07 f6
  68. #define c08 f7
  69. #define c09 f8
  70. #define c10 f9
  71. #define c11 f10
  72. #define c12 f11
  73. #define c13 f12
  74. #define c14 f13
  75. #define c15 f14
  76. #define c16 f15
  77. #define c17 f16
  78. #define c18 f17
  79. #define c19 f18
  80. #define c20 f19
  81. #define c21 f20
  82. #define c22 f21
  83. #define c23 f22
  84. #define c24 f23
  85. #define c25 f24
  86. #define c26 f25
  87. #define c27 f26
  88. #define c28 f27
  89. #define c29 f28
  90. #define c30 f29
  91. #define c31 f30
  92. #define c32 f31
  93. #define STACKSIZE 64
  94. PROLOGUE
  95. PROFCODE
  96. li r0, -16
  97. stfpdux f14, SP, r0
  98. stfpdux f15, SP, r0
  99. stfpdux f16, SP, r0
  100. stfpdux f17, SP, r0
  101. stfpdux f18, SP, r0
  102. stfpdux f19, SP, r0
  103. stfpdux f20, SP, r0
  104. stfpdux f21, SP, r0
  105. stfpdux f22, SP, r0
  106. stfpdux f23, SP, r0
  107. stfpdux f24, SP, r0
  108. stfpdux f25, SP, r0
  109. stfpdux f26, SP, r0
  110. stfpdux f27, SP, r0
  111. stfpdux f28, SP, r0
  112. stfpdux f29, SP, r0
  113. stfpdux f30, SP, r0
  114. stfpdux f31, SP, r0
  115. stwu r31, -4(SP)
  116. stwu r30, -4(SP)
  117. stwu r29, -4(SP)
  118. stwu r28, -4(SP)
  119. stwu r27, -4(SP)
  120. stwu r26, -4(SP)
  121. stwu r25, -4(SP)
  122. stwu r24, -4(SP)
  123. stwu r23, -4(SP)
  124. stwu r22, -4(SP)
  125. stwu r21, -4(SP)
  126. slwi LDA, LDA, BASE_SHIFT
  127. slwi M8, M, 3 + BASE_SHIFT
  128. li r8, -8
  129. li r9, -4
  130. li r10, -2
  131. and B2, N, r8
  132. and B3, N, r9
  133. and B4, N, r10
  134. mullw B2, B2, M
  135. mullw B3, B3, M
  136. mullw B4, B4, M
  137. slwi B2, B2, BASE_SHIFT
  138. slwi B3, B3, BASE_SHIFT
  139. slwi B4, B4, BASE_SHIFT
  140. add B2, B2, B
  141. add B3, B3, B
  142. add B4, B4, B
  143. cmpwi cr0, M, 0
  144. ble- .L999
  145. cmpwi cr0, N, 0
  146. ble- .L999
  147. subi B2, B2, 2 * SIZE
  148. subi B3, B3, 2 * SIZE
  149. subi B4, B4, 2 * SIZE
  150. subi M8, M8, 62 * SIZE
  151. li INC, 1 * SIZE
  152. li INC2, 2 * SIZE
  153. andi. r0, A, 2 * SIZE - 1
  154. bne .L100
  155. andi. r0, LDA, 2 * SIZE - 1
  156. bne .L100
  157. subi A, A, 2 * SIZE
  158. srawi. J, M, 3
  159. ble .L20
  160. .align 4
  161. .L10:
  162. mr AO1, A
  163. add AO2, A, LDA
  164. add AO3, AO2, LDA
  165. add AO4, AO3, LDA
  166. add AO5, AO4, LDA
  167. add AO6, AO5, LDA
  168. add AO7, AO6, LDA
  169. add AO8, AO7, LDA
  170. add A, AO8, LDA
  171. sub B1, B, M8
  172. addi B, B, 64 * SIZE
  173. srawi. r0, N, 3
  174. mtspr CTR, r0
  175. ble .L15
  176. .align 4
  177. .L12:
  178. LFPDUX c01, AO1, INC2
  179. LFPDUX c02, AO1, INC2
  180. LFPDUX c03, AO1, INC2
  181. LFPDUX c04, AO1, INC2
  182. LFPDUX c05, AO2, INC2
  183. LFPDUX c06, AO2, INC2
  184. LFPDUX c07, AO2, INC2
  185. LFPDUX c08, AO2, INC2
  186. LFPDUX c09, AO3, INC2
  187. LFPDUX c10, AO3, INC2
  188. LFPDUX c11, AO3, INC2
  189. LFPDUX c12, AO3, INC2
  190. LFPDUX c13, AO4, INC2
  191. LFPDUX c14, AO4, INC2
  192. LFPDUX c15, AO4, INC2
  193. LFPDUX c16, AO4, INC2
  194. LFPDUX c17, AO5, INC2
  195. LFPDUX c18, AO5, INC2
  196. LFPDUX c19, AO5, INC2
  197. LFPDUX c20, AO5, INC2
  198. LFPDUX c21, AO6, INC2
  199. LFPDUX c22, AO6, INC2
  200. LFPDUX c23, AO6, INC2
  201. LFPDUX c24, AO6, INC2
  202. LFPDUX c25, AO7, INC2
  203. LFPDUX c26, AO7, INC2
  204. LFPDUX c27, AO7, INC2
  205. LFPDUX c28, AO7, INC2
  206. LFPDUX c29, AO8, INC2
  207. LFPDUX c30, AO8, INC2
  208. LFPDUX c31, AO8, INC2
  209. LFPDUX c32, AO8, INC2
  210. STFPDUX c01, B1, M8
  211. STFPDUX c02, B1, INC2
  212. STFPDUX c03, B1, INC2
  213. STFPDUX c04, B1, INC2
  214. STFPDUX c05, B1, INC2
  215. STFPDUX c06, B1, INC2
  216. STFPDUX c07, B1, INC2
  217. STFPDUX c08, B1, INC2
  218. STFPDUX c09, B1, INC2
  219. STFPDUX c10, B1, INC2
  220. STFPDUX c11, B1, INC2
  221. STFPDUX c12, B1, INC2
  222. STFPDUX c13, B1, INC2
  223. STFPDUX c14, B1, INC2
  224. STFPDUX c15, B1, INC2
  225. STFPDUX c16, B1, INC2
  226. STFPDUX c17, B1, INC2
  227. STFPDUX c18, B1, INC2
  228. STFPDUX c19, B1, INC2
  229. STFPDUX c20, B1, INC2
  230. STFPDUX c21, B1, INC2
  231. STFPDUX c22, B1, INC2
  232. STFPDUX c23, B1, INC2
  233. STFPDUX c24, B1, INC2
  234. STFPDUX c25, B1, INC2
  235. STFPDUX c26, B1, INC2
  236. STFPDUX c27, B1, INC2
  237. STFPDUX c28, B1, INC2
  238. STFPDUX c29, B1, INC2
  239. STFPDUX c30, B1, INC2
  240. STFPDUX c31, B1, INC2
  241. STFPDUX c32, B1, INC2
  242. bdnz .L12
  243. .align 4
  244. .L15:
  245. andi. r0, N, 7
  246. ble .L19
  247. andi. r0, N, 4
  248. ble .L16
  249. LFPDUX c01, AO1, INC2
  250. LFPDUX c02, AO1, INC2
  251. LFPDUX c03, AO2, INC2
  252. LFPDUX c04, AO2, INC2
  253. LFPDUX c05, AO3, INC2
  254. LFPDUX c06, AO3, INC2
  255. LFPDUX c07, AO4, INC2
  256. LFPDUX c08, AO4, INC2
  257. LFPDUX c09, AO5, INC2
  258. LFPDUX c10, AO5, INC2
  259. LFPDUX c11, AO6, INC2
  260. LFPDUX c12, AO6, INC2
  261. LFPDUX c13, AO7, INC2
  262. LFPDUX c14, AO7, INC2
  263. LFPDUX c15, AO8, INC2
  264. LFPDUX c16, AO8, INC2
  265. STFPDUX c01, B2, INC2
  266. STFPDUX c02, B2, INC2
  267. STFPDUX c03, B2, INC2
  268. STFPDUX c04, B2, INC2
  269. STFPDUX c05, B2, INC2
  270. STFPDUX c06, B2, INC2
  271. STFPDUX c07, B2, INC2
  272. STFPDUX c08, B2, INC2
  273. STFPDUX c09, B2, INC2
  274. STFPDUX c10, B2, INC2
  275. STFPDUX c11, B2, INC2
  276. STFPDUX c12, B2, INC2
  277. STFPDUX c13, B2, INC2
  278. STFPDUX c14, B2, INC2
  279. STFPDUX c15, B2, INC2
  280. STFPDUX c16, B2, INC2
  281. .align 4
  282. .L16:
  283. andi. r0, N, 2
  284. ble .L17
  285. LFPDUX c01, AO1, INC2
  286. LFPDUX c03, AO2, INC2
  287. LFPDUX c05, AO3, INC2
  288. LFPDUX c07, AO4, INC2
  289. LFPDUX c09, AO5, INC2
  290. LFPDUX c11, AO6, INC2
  291. LFPDUX c13, AO7, INC2
  292. LFPDUX c15, AO8, INC2
  293. STFPDUX c01, B3, INC2
  294. STFPDUX c03, B3, INC2
  295. STFPDUX c05, B3, INC2
  296. STFPDUX c07, B3, INC2
  297. STFPDUX c09, B3, INC2
  298. STFPDUX c11, B3, INC2
  299. STFPDUX c13, B3, INC2
  300. STFPDUX c15, B3, INC2
  301. .align 4
  302. .L17:
  303. andi. r0, N, 1
  304. ble .L19
  305. LFDUX c01, AO1, INC2
  306. LFDUX c02, AO3, INC2
  307. LFDUX c03, AO5, INC2
  308. LFDUX c04, AO7, INC2
  309. LFSDUX c01, AO2, INC2
  310. LFSDUX c02, AO4, INC2
  311. LFSDUX c03, AO6, INC2
  312. LFSDUX c04, AO8, INC2
  313. STFPDUX c01, B4, INC2
  314. STFPDUX c02, B4, INC2
  315. STFPDUX c03, B4, INC2
  316. STFPDUX c04, B4, INC2
  317. .align 4
  318. .L19:
  319. addic. J, J, -1
  320. bgt .L10
  321. .align 4
  322. .L20:
  323. andi. J, M, 4
  324. addi M8, M8, 32 * SIZE
  325. ble .L30
  326. mr AO1, A
  327. add AO2, A, LDA
  328. add AO3, AO2, LDA
  329. add AO4, AO3, LDA
  330. add A, AO4, LDA
  331. sub B1, B, M8
  332. addi B, B, 32 * SIZE
  333. srawi. r0, N, 3
  334. mtspr CTR, r0
  335. ble .L25
  336. .align 4
  337. .L22:
  338. LFPDUX c01, AO1, INC2
  339. LFPDUX c02, AO1, INC2
  340. LFPDUX c03, AO1, INC2
  341. LFPDUX c04, AO1, INC2
  342. LFPDUX c05, AO2, INC2
  343. LFPDUX c06, AO2, INC2
  344. LFPDUX c07, AO2, INC2
  345. LFPDUX c08, AO2, INC2
  346. LFPDUX c09, AO3, INC2
  347. LFPDUX c10, AO3, INC2
  348. LFPDUX c11, AO3, INC2
  349. LFPDUX c12, AO3, INC2
  350. LFPDUX c13, AO4, INC2
  351. LFPDUX c14, AO4, INC2
  352. LFPDUX c15, AO4, INC2
  353. LFPDUX c16, AO4, INC2
  354. STFPDUX c01, B1, M8
  355. STFPDUX c02, B1, INC2
  356. STFPDUX c03, B1, INC2
  357. STFPDUX c04, B1, INC2
  358. STFPDUX c05, B1, INC2
  359. STFPDUX c06, B1, INC2
  360. STFPDUX c07, B1, INC2
  361. STFPDUX c08, B1, INC2
  362. STFPDUX c09, B1, INC2
  363. STFPDUX c10, B1, INC2
  364. STFPDUX c11, B1, INC2
  365. STFPDUX c12, B1, INC2
  366. STFPDUX c13, B1, INC2
  367. STFPDUX c14, B1, INC2
  368. STFPDUX c15, B1, INC2
  369. STFPDUX c16, B1, INC2
  370. bdnz .L22
  371. .align 4
  372. .L25:
  373. andi. r0, N, 7
  374. ble .L30
  375. andi. r0, N, 4
  376. ble .L26
  377. LFPDUX c01, AO1, INC2
  378. LFPDUX c02, AO1, INC2
  379. LFPDUX c03, AO2, INC2
  380. LFPDUX c04, AO2, INC2
  381. LFPDUX c05, AO3, INC2
  382. LFPDUX c06, AO3, INC2
  383. LFPDUX c07, AO4, INC2
  384. LFPDUX c08, AO4, INC2
  385. STFPDUX c01, B2, INC2
  386. STFPDUX c02, B2, INC2
  387. STFPDUX c03, B2, INC2
  388. STFPDUX c04, B2, INC2
  389. STFPDUX c05, B2, INC2
  390. STFPDUX c06, B2, INC2
  391. STFPDUX c07, B2, INC2
  392. STFPDUX c08, B2, INC2
  393. .align 4
  394. .L26:
  395. andi. r0, N, 2
  396. ble .L27
  397. LFPDUX c01, AO1, INC2
  398. LFPDUX c03, AO2, INC2
  399. LFPDUX c05, AO3, INC2
  400. LFPDUX c07, AO4, INC2
  401. STFPDUX c01, B3, INC2
  402. STFPDUX c03, B3, INC2
  403. STFPDUX c05, B3, INC2
  404. STFPDUX c07, B3, INC2
  405. .align 4
  406. .L27:
  407. andi. r0, N, 1
  408. ble .L30
  409. LFDUX c01, AO1, INC2
  410. LFDUX c02, AO2, INC2
  411. LFDUX c03, AO3, INC2
  412. LFDUX c04, AO4, INC2
  413. fsmfp c01, c02
  414. fsmfp c03, c04
  415. STFPDUX c01, B4, INC2
  416. STFPDUX c03, B4, INC2
  417. .align 4
  418. .L30:
  419. andi. J, M, 2
  420. addi M8, M8, 16 * SIZE
  421. ble .L40
  422. mr AO1, A
  423. add AO2, A, LDA
  424. add A, AO2, LDA
  425. sub B1, B, M8
  426. addi B, B, 16 * SIZE
  427. srawi. r0, N, 3
  428. mtspr CTR, r0
  429. ble .L35
  430. .align 4
  431. .L32:
  432. LFPDUX c01, AO1, INC2
  433. LFPDUX c02, AO1, INC2
  434. LFPDUX c03, AO1, INC2
  435. LFPDUX c04, AO1, INC2
  436. LFPDUX c05, AO2, INC2
  437. LFPDUX c06, AO2, INC2
  438. LFPDUX c07, AO2, INC2
  439. LFPDUX c08, AO2, INC2
  440. STFPDUX c01, B1, M8
  441. STFPDUX c02, B1, INC2
  442. STFPDUX c03, B1, INC2
  443. STFPDUX c04, B1, INC2
  444. STFPDUX c05, B1, INC2
  445. STFPDUX c06, B1, INC2
  446. STFPDUX c07, B1, INC2
  447. STFPDUX c08, B1, INC2
  448. bdnz .L32
  449. .align 4
  450. .L35:
  451. andi. r0, N, 7
  452. ble .L40
  453. andi. r0, N, 4
  454. ble .L36
  455. LFPDUX c01, AO1, INC2
  456. LFPDUX c02, AO1, INC2
  457. LFPDUX c03, AO2, INC2
  458. LFPDUX c04, AO2, INC2
  459. STFPDUX c01, B2, INC2
  460. STFPDUX c02, B2, INC2
  461. STFPDUX c03, B2, INC2
  462. STFPDUX c04, B2, INC2
  463. .align 4
  464. .L36:
  465. andi. r0, N, 2
  466. ble .L37
  467. LFPDUX c01, AO1, INC2
  468. LFPDUX c02, AO2, INC2
  469. STFPDUX c01, B3, INC2
  470. STFPDUX c02, B3, INC2
  471. .align 4
  472. .L37:
  473. andi. r0, N, 1
  474. ble .L40
  475. LFDUX c01, AO1, INC2
  476. LFDUX c02, AO2, INC2
  477. fsmfp c01, c02
  478. STFPDUX c01, B4, INC2
  479. .align 4
  480. .L40:
  481. andi. J, M, 1
  482. addi M8, M8, 8 * SIZE
  483. ble .L999
  484. mr AO1, A
  485. sub B1, B, M8
  486. srawi. r0, N, 3
  487. mtspr CTR, r0
  488. ble .L45
  489. .align 4
  490. .L42:
  491. LFPDUX c01, AO1, INC2
  492. LFPDUX c02, AO1, INC2
  493. LFPDUX c03, AO1, INC2
  494. LFPDUX c04, AO1, INC2
  495. STFPDUX c01, B1, M8
  496. STFPDUX c02, B1, INC2
  497. STFPDUX c03, B1, INC2
  498. STFPDUX c04, B1, INC2
  499. bdnz .L42
  500. .align 4
  501. .L45:
  502. andi. r0, N, 7
  503. ble .L999
  504. andi. r0, N, 4
  505. ble .L46
  506. LFPDUX c01, AO1, INC2
  507. LFPDUX c02, AO1, INC2
  508. STFPDUX c01, B2, INC2
  509. STFPDUX c02, B2, INC2
  510. .align 4
  511. .L46:
  512. andi. r0, N, 2
  513. ble .L47
  514. LFPDUX c01, AO1, INC2
  515. STFPDUX c01, B3, INC2
  516. .align 4
  517. .L47:
  518. andi. r0, N, 1
  519. ble .L999
  520. LFDX c01, AO1, INC2
  521. STFDX c01, B4, INC2
  522. b .L999
  523. .align 4
  524. .L100:
  525. subi A, A, SIZE
  526. srawi. J, M, 3
  527. ble .L120
  528. .align 4
  529. .L110:
  530. mr AO1, A
  531. add AO2, A, LDA
  532. add AO3, AO2, LDA
  533. add AO4, AO3, LDA
  534. add AO5, AO4, LDA
  535. add AO6, AO5, LDA
  536. add AO7, AO6, LDA
  537. add AO8, AO7, LDA
  538. add A, AO8, LDA
  539. sub B1, B, M8
  540. addi B, B, 64 * SIZE
  541. srawi. r0, N, 3
  542. mtspr CTR, r0
  543. ble .L115
  544. .align 4
  545. .L112:
  546. LFDUX c01, AO1, INC
  547. LFDUX c05, AO2, INC
  548. LFDUX c09, AO3, INC
  549. LFDUX c13, AO4, INC
  550. LFSDUX c01, AO1, INC
  551. LFSDUX c05, AO2, INC
  552. LFSDUX c09, AO3, INC
  553. LFSDUX c13, AO4, INC
  554. LFDUX c02, AO1, INC
  555. LFDUX c06, AO2, INC
  556. LFDUX c10, AO3, INC
  557. LFDUX c14, AO4, INC
  558. LFSDUX c02, AO1, INC
  559. LFSDUX c06, AO2, INC
  560. LFSDUX c10, AO3, INC
  561. LFSDUX c14, AO4, INC
  562. LFDUX c03, AO1, INC
  563. LFDUX c07, AO2, INC
  564. LFDUX c11, AO3, INC
  565. LFDUX c15, AO4, INC
  566. LFSDUX c03, AO1, INC
  567. LFSDUX c07, AO2, INC
  568. LFSDUX c11, AO3, INC
  569. LFSDUX c15, AO4, INC
  570. LFDUX c04, AO1, INC
  571. LFDUX c08, AO2, INC
  572. LFDUX c12, AO3, INC
  573. LFDUX c16, AO4, INC
  574. LFSDUX c04, AO1, INC
  575. LFSDUX c08, AO2, INC
  576. LFSDUX c12, AO3, INC
  577. LFSDUX c16, AO4, INC
  578. LFDUX c17, AO5, INC
  579. LFDUX c21, AO6, INC
  580. LFDUX c25, AO7, INC
  581. LFDUX c29, AO8, INC
  582. LFSDUX c17, AO5, INC
  583. LFSDUX c21, AO6, INC
  584. LFSDUX c25, AO7, INC
  585. LFSDUX c29, AO8, INC
  586. LFDUX c18, AO5, INC
  587. LFDUX c22, AO6, INC
  588. LFDUX c26, AO7, INC
  589. LFDUX c30, AO8, INC
  590. LFSDUX c18, AO5, INC
  591. LFSDUX c22, AO6, INC
  592. LFSDUX c26, AO7, INC
  593. LFSDUX c30, AO8, INC
  594. LFDUX c19, AO5, INC
  595. LFDUX c23, AO6, INC
  596. LFDUX c27, AO7, INC
  597. LFDUX c31, AO8, INC
  598. LFSDUX c19, AO5, INC
  599. LFSDUX c23, AO6, INC
  600. LFSDUX c27, AO7, INC
  601. LFSDUX c31, AO8, INC
  602. LFDUX c20, AO5, INC
  603. LFDUX c24, AO6, INC
  604. LFDUX c28, AO7, INC
  605. LFDUX c32, AO8, INC
  606. LFSDUX c20, AO5, INC
  607. LFSDUX c24, AO6, INC
  608. LFSDUX c28, AO7, INC
  609. LFSDUX c32, AO8, INC
  610. STFPDUX c01, B1, M8
  611. STFPDUX c02, B1, INC2
  612. STFPDUX c03, B1, INC2
  613. STFPDUX c04, B1, INC2
  614. STFPDUX c05, B1, INC2
  615. STFPDUX c06, B1, INC2
  616. STFPDUX c07, B1, INC2
  617. STFPDUX c08, B1, INC2
  618. STFPDUX c09, B1, INC2
  619. STFPDUX c10, B1, INC2
  620. STFPDUX c11, B1, INC2
  621. STFPDUX c12, B1, INC2
  622. STFPDUX c13, B1, INC2
  623. STFPDUX c14, B1, INC2
  624. STFPDUX c15, B1, INC2
  625. STFPDUX c16, B1, INC2
  626. STFPDUX c17, B1, INC2
  627. STFPDUX c18, B1, INC2
  628. STFPDUX c19, B1, INC2
  629. STFPDUX c20, B1, INC2
  630. STFPDUX c21, B1, INC2
  631. STFPDUX c22, B1, INC2
  632. STFPDUX c23, B1, INC2
  633. STFPDUX c24, B1, INC2
  634. STFPDUX c25, B1, INC2
  635. STFPDUX c26, B1, INC2
  636. STFPDUX c27, B1, INC2
  637. STFPDUX c28, B1, INC2
  638. STFPDUX c29, B1, INC2
  639. STFPDUX c30, B1, INC2
  640. STFPDUX c31, B1, INC2
  641. STFPDUX c32, B1, INC2
  642. bdnz .L112
  643. .align 4
  644. .L115:
  645. andi. r0, N, 7
  646. ble .L119
  647. andi. r0, N, 4
  648. ble .L116
  649. LFDUX c01, AO1, INC
  650. LFDUX c03, AO2, INC
  651. LFDUX c05, AO3, INC
  652. LFDUX c07, AO4, INC
  653. LFSDUX c01, AO1, INC
  654. LFSDUX c03, AO2, INC
  655. LFSDUX c05, AO3, INC
  656. LFSDUX c07, AO4, INC
  657. LFDUX c02, AO1, INC
  658. LFDUX c04, AO2, INC
  659. LFDUX c06, AO3, INC
  660. LFDUX c08, AO4, INC
  661. LFSDUX c02, AO1, INC
  662. LFSDUX c04, AO2, INC
  663. LFSDUX c06, AO3, INC
  664. LFSDUX c08, AO4, INC
  665. LFDUX c09, AO5, INC
  666. LFDUX c11, AO6, INC
  667. LFDUX c13, AO7, INC
  668. LFDUX c15, AO8, INC
  669. LFSDUX c09, AO5, INC
  670. LFSDUX c11, AO6, INC
  671. LFSDUX c13, AO7, INC
  672. LFSDUX c15, AO8, INC
  673. LFDUX c10, AO5, INC
  674. LFDUX c12, AO6, INC
  675. LFDUX c14, AO7, INC
  676. LFDUX c16, AO8, INC
  677. LFSDUX c10, AO5, INC
  678. LFSDUX c12, AO6, INC
  679. LFSDUX c14, AO7, INC
  680. LFSDUX c16, AO8, INC
  681. STFPDUX c01, B2, INC2
  682. STFPDUX c02, B2, INC2
  683. STFPDUX c03, B2, INC2
  684. STFPDUX c04, B2, INC2
  685. STFPDUX c05, B2, INC2
  686. STFPDUX c06, B2, INC2
  687. STFPDUX c07, B2, INC2
  688. STFPDUX c08, B2, INC2
  689. STFPDUX c09, B2, INC2
  690. STFPDUX c10, B2, INC2
  691. STFPDUX c11, B2, INC2
  692. STFPDUX c12, B2, INC2
  693. STFPDUX c13, B2, INC2
  694. STFPDUX c14, B2, INC2
  695. STFPDUX c15, B2, INC2
  696. STFPDUX c16, B2, INC2
  697. .align 4
  698. .L116:
  699. andi. r0, N, 2
  700. ble .L117
  701. LFDUX c01, AO1, INC
  702. LFDUX c03, AO2, INC
  703. LFDUX c05, AO3, INC
  704. LFDUX c07, AO4, INC
  705. LFSDUX c01, AO1, INC
  706. LFSDUX c03, AO2, INC
  707. LFSDUX c05, AO3, INC
  708. LFSDUX c07, AO4, INC
  709. LFDUX c09, AO5, INC
  710. LFDUX c11, AO6, INC
  711. LFDUX c13, AO7, INC
  712. LFDUX c15, AO8, INC
  713. LFSDUX c09, AO5, INC
  714. LFSDUX c11, AO6, INC
  715. LFSDUX c13, AO7, INC
  716. LFSDUX c15, AO8, INC
  717. STFPDUX c01, B3, INC2
  718. STFPDUX c03, B3, INC2
  719. STFPDUX c05, B3, INC2
  720. STFPDUX c07, B3, INC2
  721. STFPDUX c09, B3, INC2
  722. STFPDUX c11, B3, INC2
  723. STFPDUX c13, B3, INC2
  724. STFPDUX c15, B3, INC2
  725. .align 4
  726. .L117:
  727. andi. r0, N, 1
  728. ble .L119
  729. LFDUX c01, AO1, INC
  730. LFDUX c02, AO3, INC
  731. LFDUX c03, AO5, INC
  732. LFDUX c04, AO7, INC
  733. LFSDUX c01, AO2, INC
  734. LFSDUX c02, AO4, INC
  735. LFSDUX c03, AO6, INC
  736. LFSDUX c04, AO8, INC
  737. STFPDUX c01, B4, INC2
  738. STFPDUX c02, B4, INC2
  739. STFPDUX c03, B4, INC2
  740. STFPDUX c04, B4, INC2
  741. .align 4
  742. .L119:
  743. addic. J, J, -1
  744. bgt .L110
  745. .align 4
  746. .L120:
  747. andi. J, M, 4
  748. addi M8, M8, 32 * SIZE
  749. ble .L130
  750. mr AO1, A
  751. add AO2, A, LDA
  752. add AO3, AO2, LDA
  753. add AO4, AO3, LDA
  754. add A, AO4, LDA
  755. sub B1, B, M8
  756. addi B, B, 32 * SIZE
  757. srawi. r0, N, 3
  758. mtspr CTR, r0
  759. ble .L125
  760. .align 4
  761. .L122:
  762. LFDUX c01, AO1, INC
  763. LFDUX c05, AO2, INC
  764. LFDUX c09, AO3, INC
  765. LFDUX c13, AO4, INC
  766. LFSDUX c01, AO1, INC
  767. LFSDUX c05, AO2, INC
  768. LFSDUX c09, AO3, INC
  769. LFSDUX c13, AO4, INC
  770. LFDUX c02, AO1, INC
  771. LFDUX c06, AO2, INC
  772. LFDUX c10, AO3, INC
  773. LFDUX c14, AO4, INC
  774. LFSDUX c02, AO1, INC
  775. LFSDUX c06, AO2, INC
  776. LFSDUX c10, AO3, INC
  777. LFSDUX c14, AO4, INC
  778. LFDUX c03, AO1, INC
  779. LFDUX c07, AO2, INC
  780. LFDUX c11, AO3, INC
  781. LFDUX c15, AO4, INC
  782. LFSDUX c03, AO1, INC
  783. LFSDUX c07, AO2, INC
  784. LFSDUX c11, AO3, INC
  785. LFSDUX c15, AO4, INC
  786. LFDUX c04, AO1, INC
  787. LFDUX c08, AO2, INC
  788. LFDUX c12, AO3, INC
  789. LFDUX c16, AO4, INC
  790. LFSDUX c04, AO1, INC
  791. LFSDUX c08, AO2, INC
  792. LFSDUX c12, AO3, INC
  793. LFSDUX c16, AO4, INC
  794. STFPDUX c01, B1, M8
  795. STFPDUX c02, B1, INC2
  796. STFPDUX c03, B1, INC2
  797. STFPDUX c04, B1, INC2
  798. STFPDUX c05, B1, INC2
  799. STFPDUX c06, B1, INC2
  800. STFPDUX c07, B1, INC2
  801. STFPDUX c08, B1, INC2
  802. STFPDUX c09, B1, INC2
  803. STFPDUX c10, B1, INC2
  804. STFPDUX c11, B1, INC2
  805. STFPDUX c12, B1, INC2
  806. STFPDUX c13, B1, INC2
  807. STFPDUX c14, B1, INC2
  808. STFPDUX c15, B1, INC2
  809. STFPDUX c16, B1, INC2
  810. bdnz .L122
  811. .align 4
  812. .L125:
  813. andi. r0, N, 7
  814. ble .L130
  815. andi. r0, N, 4
  816. ble .L126
  817. LFDUX c01, AO1, INC
  818. LFDUX c03, AO2, INC
  819. LFDUX c05, AO3, INC
  820. LFDUX c07, AO4, INC
  821. LFSDUX c01, AO1, INC
  822. LFSDUX c03, AO2, INC
  823. LFSDUX c05, AO3, INC
  824. LFSDUX c07, AO4, INC
  825. LFDUX c02, AO1, INC
  826. LFDUX c04, AO2, INC
  827. LFDUX c06, AO3, INC
  828. LFDUX c08, AO4, INC
  829. LFSDUX c02, AO1, INC
  830. LFSDUX c04, AO2, INC
  831. LFSDUX c06, AO3, INC
  832. LFSDUX c08, AO4, INC
  833. STFPDUX c01, B2, INC2
  834. STFPDUX c02, B2, INC2
  835. STFPDUX c03, B2, INC2
  836. STFPDUX c04, B2, INC2
  837. STFPDUX c05, B2, INC2
  838. STFPDUX c06, B2, INC2
  839. STFPDUX c07, B2, INC2
  840. STFPDUX c08, B2, INC2
  841. .align 4
  842. .L126:
  843. andi. r0, N, 2
  844. ble .L127
  845. LFDUX c01, AO1, INC
  846. LFDUX c03, AO2, INC
  847. LFDUX c05, AO3, INC
  848. LFDUX c07, AO4, INC
  849. LFSDUX c01, AO1, INC
  850. LFSDUX c03, AO2, INC
  851. LFSDUX c05, AO3, INC
  852. LFSDUX c07, AO4, INC
  853. STFPDUX c01, B3, INC2
  854. STFPDUX c03, B3, INC2
  855. STFPDUX c05, B3, INC2
  856. STFPDUX c07, B3, INC2
  857. .align 4
  858. .L127:
  859. andi. r0, N, 1
  860. ble .L130
  861. LFDUX c01, AO1, INC
  862. LFDUX c02, AO2, INC
  863. LFDUX c03, AO3, INC
  864. LFDUX c04, AO4, INC
  865. fsmfp c01, c02
  866. fsmfp c03, c04
  867. STFPDUX c01, B4, INC2
  868. STFPDUX c03, B4, INC2
  869. .align 4
  870. .L130:
  871. andi. J, M, 2
  872. addi M8, M8, 16 * SIZE
  873. ble .L140
  874. mr AO1, A
  875. add AO2, A, LDA
  876. add A, AO2, LDA
  877. sub B1, B, M8
  878. addi B, B, 16 * SIZE
  879. srawi. r0, N, 3
  880. mtspr CTR, r0
  881. ble .L135
  882. .align 4
  883. .L132:
  884. LFDUX c01, AO1, INC
  885. LFDUX c02, AO1, INC
  886. LFDUX c03, AO1, INC
  887. LFDUX c04, AO1, INC
  888. LFDUX c05, AO1, INC
  889. LFDUX c06, AO1, INC
  890. LFDUX c07, AO1, INC
  891. LFDUX c08, AO1, INC
  892. LFDUX c09, AO2, INC
  893. LFDUX c10, AO2, INC
  894. LFDUX c11, AO2, INC
  895. LFDUX c12, AO2, INC
  896. LFDUX c13, AO2, INC
  897. LFDUX c14, AO2, INC
  898. LFDUX c15, AO2, INC
  899. LFDUX c16, AO2, INC
  900. fsmfp c01, c02
  901. fsmfp c03, c04
  902. fsmfp c05, c06
  903. fsmfp c07, c08
  904. fsmfp c09, c10
  905. fsmfp c11, c12
  906. fsmfp c13, c14
  907. fsmfp c15, c16
  908. STFPDUX c01, B1, M8
  909. STFPDUX c03, B1, INC2
  910. STFPDUX c05, B1, INC2
  911. STFPDUX c07, B1, INC2
  912. STFPDUX c09, B1, INC2
  913. STFPDUX c11, B1, INC2
  914. STFPDUX c13, B1, INC2
  915. STFPDUX c15, B1, INC2
  916. bdnz .L132
  917. .align 4
  918. .L135:
  919. andi. r0, N, 7
  920. ble .L140
  921. andi. r0, N, 4
  922. ble .L136
  923. LFDUX c01, AO1, INC
  924. LFDUX c02, AO1, INC
  925. LFDUX c03, AO1, INC
  926. LFDUX c04, AO1, INC
  927. LFDUX c09, AO2, INC
  928. LFDUX c10, AO2, INC
  929. LFDUX c11, AO2, INC
  930. LFDUX c12, AO2, INC
  931. fsmfp c01, c02
  932. fsmfp c03, c04
  933. fsmfp c09, c10
  934. fsmfp c11, c12
  935. STFPDUX c01, B2, INC2
  936. STFPDUX c03, B2, INC2
  937. STFPDUX c09, B2, INC2
  938. STFPDUX c11, B2, INC2
  939. .align 4
  940. .L136:
  941. andi. r0, N, 2
  942. ble .L137
  943. LFDUX c01, AO1, INC
  944. LFDUX c02, AO1, INC
  945. LFDUX c09, AO2, INC
  946. LFDUX c10, AO2, INC
  947. fsmfp c01, c02
  948. fsmfp c09, c10
  949. STFPDUX c01, B3, INC2
  950. STFPDUX c09, B3, INC2
  951. .align 4
  952. .L137:
  953. andi. r0, N, 1
  954. ble .L140
  955. LFDUX c01, AO1, INC
  956. LFDUX c02, AO2, INC
  957. fsmfp c01, c02
  958. STFPDUX c01, B4, INC2
  959. .align 4
  960. .L140:
  961. andi. J, M, 1
  962. addi M8, M8, 8 * SIZE
  963. ble .L999
  964. mr AO1, A
  965. sub B1, B, M8
  966. srawi. r0, N, 3
  967. mtspr CTR, r0
  968. ble .L145
  969. .align 4
  970. .L142:
  971. LFDUX c01, AO1, INC
  972. LFDUX c02, AO1, INC
  973. LFDUX c03, AO1, INC
  974. LFDUX c04, AO1, INC
  975. LFDUX c05, AO1, INC
  976. LFDUX c06, AO1, INC
  977. LFDUX c07, AO1, INC
  978. LFDUX c08, AO1, INC
  979. fsmfp c01, c02
  980. fsmfp c03, c04
  981. fsmfp c05, c06
  982. fsmfp c07, c08
  983. STFPDUX c01, B1, M8
  984. STFPDUX c03, B1, INC2
  985. STFPDUX c05, B1, INC2
  986. STFPDUX c07, B1, INC2
  987. bdnz .L142
  988. .align 4
  989. .L145:
  990. andi. r0, N, 7
  991. ble .L999
  992. andi. r0, N, 4
  993. ble .L146
  994. LFDUX c01, AO1, INC
  995. LFDUX c02, AO1, INC
  996. LFDUX c03, AO1, INC
  997. LFDUX c04, AO1, INC
  998. fsmfp c01, c02
  999. fsmfp c03, c04
  1000. STFPDUX c01, B2, INC2
  1001. STFPDUX c03, B2, INC2
  1002. .align 4
  1003. .L146:
  1004. andi. r0, N, 2
  1005. ble .L147
  1006. LFDUX c01, AO1, INC
  1007. LFDUX c02, AO1, INC
  1008. fsmfp c01, c02
  1009. STFPDUX c01, B3, INC2
  1010. .align 4
  1011. .L147:
  1012. andi. r0, N, 1
  1013. ble .L999
  1014. LFDX c01, AO1, INC
  1015. STFDX c01, B4, INC2
  1016. .align 4
  1017. .L999:
  1018. addi SP, SP, -4
  1019. lwzu r21, 4(SP)
  1020. lwzu r22, 4(SP)
  1021. lwzu r23, 4(SP)
  1022. lwzu r24, 4(SP)
  1023. lwzu r25, 4(SP)
  1024. lwzu r26, 4(SP)
  1025. lwzu r27, 4(SP)
  1026. lwzu r28, 4(SP)
  1027. lwzu r29, 4(SP)
  1028. lwzu r30, 4(SP)
  1029. lwzu r31, 4(SP)
  1030. subi SP, SP, 12
  1031. li r0, 16
  1032. lfpdux f31, SP, r0
  1033. lfpdux f30, SP, r0
  1034. lfpdux f29, SP, r0
  1035. lfpdux f28, SP, r0
  1036. lfpdux f27, SP, r0
  1037. lfpdux f26, SP, r0
  1038. lfpdux f25, SP, r0
  1039. lfpdux f24, SP, r0
  1040. lfpdux f23, SP, r0
  1041. lfpdux f22, SP, r0
  1042. lfpdux f21, SP, r0
  1043. lfpdux f20, SP, r0
  1044. lfpdux f19, SP, r0
  1045. lfpdux f18, SP, r0
  1046. lfpdux f17, SP, r0
  1047. lfpdux f16, SP, r0
  1048. lfpdux f15, SP, r0
  1049. lfpdux f14, SP, r0
  1050. addi SP, SP, 16
  1051. blr
  1052. EPILOGUE