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.

kernelMacros.S 45 kB

8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477
  1. /*********************************KERNEL 8x4***********************************************/
  2. /*Zero C block Vectors*/
  3. .macro ZERO_CVEC_8x4
  4. vzero %v16
  5. vzero %v17
  6. vzero %v18
  7. vzero %v19
  8. vzero %v20
  9. vzero %v21
  10. vzero %v22
  11. vzero %v23
  12. vzero %v24
  13. vzero %v25
  14. vzero %v26
  15. vzero %v27
  16. vzero %v28
  17. vzero %v29
  18. vzero %v30
  19. vzero %v31
  20. .endm
  21. /*Calculate for 8x4 C blocks*/
  22. .macro CALC_8x4 PTR_A_REG,PTR_B_REG
  23. vlrepg %v7, 0(\PTR_B_REG)
  24. vlrepg %v1,8(\PTR_B_REG)
  25. vl %v2, 0(\PTR_A_REG)
  26. vl %v3, 16(\PTR_A_REG)
  27. vl %v4, 32(\PTR_A_REG)
  28. vl %v5, 48(\PTR_A_REG)
  29. vfmadb %v16,%v2,%v7,%v16
  30. vfmadb %v17,%v3,%v7,%v17
  31. vfmadb %v18,%v4,%v7,%v18
  32. vfmadb %v19,%v5,%v7,%v19
  33. vfmadb %v20,%v2,%v1,%v20
  34. vfmadb %v21,%v3,%v1,%v21
  35. vlrepg %v7,16(\PTR_B_REG)
  36. vfmadb %v22,%v4,%v1,%v22
  37. vfmadb %v23,%v5,%v1,%v23
  38. vlrepg %v1,24(\PTR_B_REG)
  39. vfmadb %v24,%v2,%v7,%v24
  40. vfmadb %v25,%v3,%v7,%v25
  41. vfmadb %v26,%v4,%v7,%v26
  42. la \PTR_A_REG, 64(\PTR_A_REG)
  43. vfmadb %v27,%v5,%v7,%v27
  44. vfmadb %v28,%v2,%v1,%v28
  45. vfmadb %v29,%v3,%v1,%v29
  46. la \PTR_B_REG, 32(\PTR_B_REG)
  47. vfmadb %v30,%v4,%v1,%v30
  48. vfmadb %v31,%v5,%v1,%v31
  49. .endm
  50. /*Calculate for 8x4_4 C blocks*/
  51. .macro CALC_8x4_4 PTR_A_REG,PTR_B_REG
  52. vlrepg %v7, 0(\PTR_B_REG)
  53. vlrepg %v1,8(\PTR_B_REG)
  54. vl %v2, 0(\PTR_A_REG)
  55. vl %v3, 16(\PTR_A_REG)
  56. vl %v4, 32(\PTR_A_REG)
  57. vl %v5, 48(\PTR_A_REG)
  58. vfmadb %v16,%v2,%v7,%v16
  59. vfmadb %v17,%v3,%v7,%v17
  60. vfmadb %v18,%v4,%v7,%v18
  61. vfmadb %v19,%v5,%v7,%v19
  62. vfmadb %v20,%v2,%v1,%v20
  63. vfmadb %v21,%v3,%v1,%v21
  64. vlrepg %v7,16(\PTR_B_REG)
  65. vfmadb %v22,%v4,%v1,%v22
  66. vfmadb %v23,%v5,%v1,%v23
  67. vlrepg %v1,24(\PTR_B_REG)
  68. vfmadb %v24,%v2,%v7,%v24
  69. vfmadb %v25,%v3,%v7,%v25
  70. vfmadb %v26,%v4,%v7,%v26
  71. vfmadb %v27,%v5,%v7,%v27
  72. vfmadb %v28,%v2,%v1,%v28
  73. vfmadb %v29,%v3,%v1,%v29
  74. vfmadb %v30,%v4,%v1,%v30
  75. vfmadb %v31,%v5,%v1,%v31
  76. vlrepg %v7, 32(\PTR_B_REG)
  77. vlrepg %v1,40(\PTR_B_REG)
  78. vl %v2, 64(\PTR_A_REG)
  79. vl %v3, 80(\PTR_A_REG)
  80. vl %v4, 96(\PTR_A_REG)
  81. vl %v5, 112(\PTR_A_REG)
  82. vfmadb %v16,%v2,%v7,%v16
  83. vfmadb %v17,%v3,%v7,%v17
  84. vfmadb %v18,%v4,%v7,%v18
  85. vfmadb %v19,%v5,%v7,%v19
  86. vfmadb %v20,%v2,%v1,%v20
  87. vfmadb %v21,%v3,%v1,%v21
  88. vlrepg %v7,48(\PTR_B_REG)
  89. vfmadb %v22,%v4,%v1,%v22
  90. vfmadb %v23,%v5,%v1,%v23
  91. vlrepg %v1,56(\PTR_B_REG)
  92. vfmadb %v24,%v2,%v7,%v24
  93. vfmadb %v25,%v3,%v7,%v25
  94. vfmadb %v26,%v4,%v7,%v26
  95. vfmadb %v27,%v5,%v7,%v27
  96. vfmadb %v28,%v2,%v1,%v28
  97. vfmadb %v29,%v3,%v1,%v29
  98. vfmadb %v30,%v4,%v1,%v30
  99. vfmadb %v31,%v5,%v1,%v31
  100. vlrepg %v7, 64(\PTR_B_REG)
  101. vlrepg %v1,72(\PTR_B_REG)
  102. vl %v2, 128(\PTR_A_REG)
  103. vl %v3, 144(\PTR_A_REG)
  104. vl %v4, 160(\PTR_A_REG)
  105. vl %v5, 176(\PTR_A_REG)
  106. vfmadb %v16,%v2,%v7,%v16
  107. vfmadb %v17,%v3,%v7,%v17
  108. vfmadb %v18,%v4,%v7,%v18
  109. vfmadb %v19,%v5,%v7,%v19
  110. vfmadb %v20,%v2,%v1,%v20
  111. vfmadb %v21,%v3,%v1,%v21
  112. vlrepg %v7,80(\PTR_B_REG)
  113. vfmadb %v22,%v4,%v1,%v22
  114. vfmadb %v23,%v5,%v1,%v23
  115. vlrepg %v1,88(\PTR_B_REG)
  116. vfmadb %v24,%v2,%v7,%v24
  117. vfmadb %v25,%v3,%v7,%v25
  118. vfmadb %v26,%v4,%v7,%v26
  119. vfmadb %v27,%v5,%v7,%v27
  120. vfmadb %v28,%v2,%v1,%v28
  121. vfmadb %v29,%v3,%v1,%v29
  122. vfmadb %v30,%v4,%v1,%v30
  123. vfmadb %v31,%v5,%v1,%v31
  124. vlrepg %v7, 96(\PTR_B_REG)
  125. vlrepg %v1,104(\PTR_B_REG)
  126. vl %v2, 192(\PTR_A_REG)
  127. vl %v3, 208(\PTR_A_REG)
  128. vl %v4, 224(\PTR_A_REG)
  129. vl %v5, 240(\PTR_A_REG)
  130. vfmadb %v16,%v2,%v7,%v16
  131. vfmadb %v17,%v3,%v7,%v17
  132. vfmadb %v18,%v4,%v7,%v18
  133. vfmadb %v19,%v5,%v7,%v19
  134. vfmadb %v20,%v2,%v1,%v20
  135. vfmadb %v21,%v3,%v1,%v21
  136. vlrepg %v7,112(\PTR_B_REG)
  137. vfmadb %v22,%v4,%v1,%v22
  138. vfmadb %v23,%v5,%v1,%v23
  139. vlrepg %v1,120(\PTR_B_REG)
  140. vfmadb %v24,%v2,%v7,%v24
  141. vfmadb %v25,%v3,%v7,%v25
  142. vfmadb %v26,%v4,%v7,%v26
  143. vfmadb %v27,%v5,%v7,%v27
  144. la \PTR_B_REG, 128(\PTR_B_REG)
  145. vfmadb %v28,%v2,%v1,%v28
  146. vfmadb %v29,%v3,%v1,%v29
  147. vfmadb %v30,%v4,%v1,%v30
  148. la \PTR_A_REG, 256(\PTR_A_REG)
  149. vfmadb %v31,%v5,%v1,%v31
  150. .endm
  151. /*STORE C8X4*/
  152. .macro STORE_8x4 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  153. /*add LDC_BYTE_reg=LDC_BYTE_original<<1 */
  154. la LOCAL_VAR1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL)
  155. vl %v1,0(\CIJ_REG)
  156. vfmadb %v1,%v16,\ALPHA_VECREG,%v1
  157. vst %v1,0(\CIJ_REG)
  158. vl %v2,16(\CIJ_REG)
  159. vfmadb %v2,%v17,\ALPHA_VECREG,%v2
  160. vst %v2,16(\CIJ_REG)
  161. vl %v3,32(\CIJ_REG)
  162. vfmadb %v3,%v18,\ALPHA_VECREG,%v3
  163. vst %v3,32(\CIJ_REG)
  164. vl %v4,48(\CIJ_REG)
  165. vfmadb %v4,%v19,\ALPHA_VECREG,%v4
  166. vst %v4,48(\CIJ_REG)
  167. la LOCAL_VAR2,0(LOCAL_VAR1,\LDC_BYTE_ORIGINAL )
  168. /*add c LDC_BYTE*/
  169. vl %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  170. vfmadb %v1,%v20,\ALPHA_VECREG,%v1
  171. vst %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  172. vl %v2,16(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  173. vfmadb %v2,%v21,\ALPHA_VECREG,%v2
  174. vst %v2,16(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  175. vl %v3,32(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  176. vfmadb %v3,%v22,\ALPHA_VECREG,%v3
  177. vst %v3,32(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  178. vl %v4,48(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  179. vfmadb %v4,%v23,\ALPHA_VECREG,%v4
  180. vst %v4,48(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  181. vl %v1,0(\CIJ_REG,LOCAL_VAR1)
  182. vfmadb %v1,%v24,\ALPHA_VECREG,%v1
  183. vst %v1,0(\CIJ_REG,LOCAL_VAR1)
  184. vl %v2,16(\CIJ_REG,LOCAL_VAR1)
  185. vfmadb %v2,%v25,\ALPHA_VECREG,%v2
  186. vst %v2,16(\CIJ_REG,LOCAL_VAR1)
  187. vl %v3,32(\CIJ_REG,LOCAL_VAR1)
  188. vfmadb %v3,%v26,\ALPHA_VECREG,%v3
  189. vst %v3,32(\CIJ_REG,LOCAL_VAR1)
  190. vl %v4,48(\CIJ_REG,LOCAL_VAR1)
  191. vfmadb %v4,%v27,\ALPHA_VECREG,%v4
  192. vst %v4,48(\CIJ_REG,LOCAL_VAR1)
  193. vl %v1,0(\CIJ_REG,LOCAL_VAR2)
  194. vfmadb %v1,%v28,\ALPHA_VECREG,%v1
  195. vst %v1,0(\CIJ_REG,LOCAL_VAR2)
  196. vl %v2,16(\CIJ_REG,LOCAL_VAR2)
  197. vfmadb %v2,%v29,\ALPHA_VECREG,%v2
  198. vst %v2,16(\CIJ_REG,LOCAL_VAR2)
  199. vl %v3,32(\CIJ_REG,LOCAL_VAR2)
  200. vfmadb %v3,%v30,\ALPHA_VECREG,%v3
  201. vst %v3,32(\CIJ_REG,LOCAL_VAR2)
  202. vl %v4,48(\CIJ_REG,LOCAL_VAR2)
  203. vfmadb %v4,%v31,\ALPHA_VECREG,%v4
  204. vst %v4,48(\CIJ_REG,LOCAL_VAR2)
  205. la \CIJ_REG,64(\CIJ_REG)
  206. .endm
  207. /*STORE TRMM C8X4*/
  208. .macro STORE_TRMM_8x4 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  209. /*add LDC_BYTE_reg=LDC_BYTE_original<<1 */
  210. la LOCAL_VAR1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL)
  211. vfmdb %v1,%v16,\ALPHA_VECREG
  212. vst %v1,0(\CIJ_REG)
  213. vfmdb %v2,%v17,\ALPHA_VECREG
  214. vst %v2,16(\CIJ_REG)
  215. vfmdb %v3,%v18,\ALPHA_VECREG
  216. vst %v3,32(\CIJ_REG)
  217. vfmdb %v4,%v19,\ALPHA_VECREG
  218. vst %v4,48(\CIJ_REG)
  219. la LOCAL_VAR2,0(LOCAL_VAR1,\LDC_BYTE_ORIGINAL )
  220. /*add c LDC_BYTE*/
  221. vfmdb %v1,%v20,\ALPHA_VECREG
  222. vst %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  223. vfmdb %v2,%v21,\ALPHA_VECREG
  224. vst %v2,16(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  225. vfmdb %v3,%v22,\ALPHA_VECREG
  226. vst %v3,32(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  227. vfmdb %v4,%v23,\ALPHA_VECREG
  228. vst %v4,48(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  229. vfmdb %v1,%v24,\ALPHA_VECREG
  230. vst %v1,0(\CIJ_REG,LOCAL_VAR1)
  231. vfmdb %v2,%v25,\ALPHA_VECREG
  232. vst %v2,16(\CIJ_REG,LOCAL_VAR1)
  233. vfmdb %v3,%v26,\ALPHA_VECREG
  234. vst %v3,32(\CIJ_REG,LOCAL_VAR1)
  235. vfmdb %v4,%v27,\ALPHA_VECREG
  236. vst %v4,48(\CIJ_REG,LOCAL_VAR1)
  237. vfmdb %v1,%v28,\ALPHA_VECREG
  238. vst %v1,0(\CIJ_REG,LOCAL_VAR2)
  239. vfmdb %v2,%v29,\ALPHA_VECREG
  240. vst %v2,16(\CIJ_REG,LOCAL_VAR2)
  241. vfmdb %v3,%v30,\ALPHA_VECREG
  242. vst %v3,32(\CIJ_REG,LOCAL_VAR2)
  243. vfmdb %v4,%v31,\ALPHA_VECREG
  244. vst %v4,48(\CIJ_REG,LOCAL_VAR2)
  245. la \CIJ_REG,64(\CIJ_REG)
  246. .endm
  247. /**************************************Kernel4x4*************************************************/
  248. /*Zero C block Vectors*/
  249. .macro ZERO_CVEC_4x4
  250. vzero %v16
  251. vzero %v17
  252. vzero %v20
  253. vzero %v21
  254. vzero %v24
  255. vzero %v25
  256. vzero %v28
  257. vzero %v29
  258. .endm
  259. /*Calculate for 4x4 C blocks*/
  260. .macro CALC_4x4 PTR_A_REG,PTR_B_REG
  261. vlrepg %v7, 0(\PTR_B_REG)
  262. vlrepg %v1,8(\PTR_B_REG)
  263. vl %v2, 0(\PTR_A_REG)
  264. vl %v3, 16(\PTR_A_REG)
  265. vfmadb %v16,%v2,%v7,%v16
  266. vfmadb %v17,%v3,%v7,%v17
  267. vfmadb %v20,%v2,%v1,%v20
  268. vfmadb %v21,%v3,%v1,%v21
  269. vlrepg %v7,16(\PTR_B_REG)
  270. vlrepg %v1,24(\PTR_B_REG)
  271. vfmadb %v24,%v2,%v7,%v24
  272. vfmadb %v25,%v3,%v7,%v25
  273. la \PTR_A_REG, 32(\PTR_A_REG)
  274. vfmadb %v28,%v2,%v1,%v28
  275. vfmadb %v29,%v3,%v1,%v29
  276. la \PTR_B_REG, 32(\PTR_B_REG)
  277. .endm
  278. .macro CALC_4x4_4 PTR_A_REG,PTR_B_REG
  279. vlrepg %v7, 0(\PTR_B_REG)
  280. vlrepg %v1,8(\PTR_B_REG)
  281. vl %v2, 0(\PTR_A_REG)
  282. vl %v3, 16(\PTR_A_REG)
  283. vfmadb %v16,%v2,%v7,%v16
  284. vfmadb %v17,%v3,%v7,%v17
  285. vfmadb %v20,%v2,%v1,%v20
  286. vfmadb %v21,%v3,%v1,%v21
  287. vlrepg %v7,16(\PTR_B_REG)
  288. vlrepg %v1,24(\PTR_B_REG)
  289. vfmadb %v24,%v2,%v7,%v24
  290. vfmadb %v25,%v3,%v7,%v25
  291. vfmadb %v28,%v2,%v1,%v28
  292. vfmadb %v29,%v3,%v1,%v29
  293. vlrepg %v7, 32(\PTR_B_REG)
  294. vlrepg %v1,40(\PTR_B_REG)
  295. vl %v2, 32(\PTR_A_REG)
  296. vl %v3, 48(\PTR_A_REG)
  297. vfmadb %v16,%v2,%v7,%v16
  298. vfmadb %v17,%v3,%v7,%v17
  299. vfmadb %v20,%v2,%v1,%v20
  300. vfmadb %v21,%v3,%v1,%v21
  301. vlrepg %v7,48(\PTR_B_REG)
  302. vlrepg %v1,56(\PTR_B_REG)
  303. vfmadb %v24,%v2,%v7,%v24
  304. vfmadb %v25,%v3,%v7,%v25
  305. vfmadb %v28,%v2,%v1,%v28
  306. vfmadb %v29,%v3,%v1,%v29
  307. vlrepg %v7, 64(\PTR_B_REG)
  308. vlrepg %v1,72(\PTR_B_REG)
  309. vl %v2, 64(\PTR_A_REG)
  310. vl %v3, 80(\PTR_A_REG)
  311. vfmadb %v16,%v2,%v7,%v16
  312. vfmadb %v17,%v3,%v7,%v17
  313. vfmadb %v20,%v2,%v1,%v20
  314. vfmadb %v21,%v3,%v1,%v21
  315. vlrepg %v7,80(\PTR_B_REG)
  316. vlrepg %v1,88(\PTR_B_REG)
  317. vfmadb %v24,%v2,%v7,%v24
  318. vfmadb %v25,%v3,%v7,%v25
  319. vfmadb %v28,%v2,%v1,%v28
  320. vfmadb %v29,%v3,%v1,%v29
  321. vlrepg %v7, 96(\PTR_B_REG)
  322. vlrepg %v1,104(\PTR_B_REG)
  323. vl %v2, 96(\PTR_A_REG)
  324. vl %v3, 112(\PTR_A_REG)
  325. vfmadb %v16,%v2,%v7,%v16
  326. vfmadb %v17,%v3,%v7,%v17
  327. vfmadb %v20,%v2,%v1,%v20
  328. vfmadb %v21,%v3,%v1,%v21
  329. vlrepg %v7,112(\PTR_B_REG)
  330. la \PTR_A_REG, 128(\PTR_A_REG)
  331. vlrepg %v1,120(\PTR_B_REG)
  332. vfmadb %v24,%v2,%v7,%v24
  333. vfmadb %v25,%v3,%v7,%v25
  334. vfmadb %v28,%v2,%v1,%v28
  335. la \PTR_B_REG, 128(\PTR_B_REG)
  336. vfmadb %v29,%v3,%v1,%v29
  337. .endm
  338. /*STORE C4X4*/
  339. .macro STORE_4x4 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  340. /*add LDC_BYTE_reg=LDC_BYTE_original<<1 */
  341. la LOCAL_VAR1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL)
  342. vl %v1,0(\CIJ_REG)
  343. vfmadb %v1,%v16,\ALPHA_VECREG,%v1
  344. vst %v1,0(\CIJ_REG)
  345. vl %v2,16(\CIJ_REG)
  346. vfmadb %v2,%v17,\ALPHA_VECREG,%v2
  347. vst %v2,16(\CIJ_REG)
  348. la LOCAL_VAR2,0(LOCAL_VAR1,\LDC_BYTE_ORIGINAL )
  349. /*add c LDC_BYTE*/
  350. vl %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  351. vfmadb %v1,%v20,\ALPHA_VECREG,%v1
  352. vst %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  353. vl %v2,16(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  354. vfmadb %v2,%v21,\ALPHA_VECREG,%v2
  355. vst %v2,16(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  356. vl %v1,0(\CIJ_REG,LOCAL_VAR1)
  357. vfmadb %v1,%v24,\ALPHA_VECREG,%v1
  358. vst %v1,0(\CIJ_REG,LOCAL_VAR1)
  359. vl %v2,16(\CIJ_REG,LOCAL_VAR1)
  360. vfmadb %v2,%v25,\ALPHA_VECREG,%v2
  361. vst %v2,16(\CIJ_REG,LOCAL_VAR1)
  362. vl %v1,0(\CIJ_REG,LOCAL_VAR2)
  363. vfmadb %v1,%v28,\ALPHA_VECREG,%v1
  364. vst %v1,0(\CIJ_REG,LOCAL_VAR2)
  365. vl %v2,16(\CIJ_REG,LOCAL_VAR2)
  366. vfmadb %v2,%v29,\ALPHA_VECREG,%v2
  367. vst %v2,16(\CIJ_REG,LOCAL_VAR2)
  368. la \CIJ_REG,32(\CIJ_REG)
  369. .endm
  370. /*STORE TRMM C4X4*/
  371. .macro STORE_TRMM_4x4 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  372. /*add LDC_BYTE_reg=LDC_BYTE_original<<1 */
  373. la LOCAL_VAR1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL)
  374. vfmdb %v1,%v16,\ALPHA_VECREG
  375. vst %v1,0(\CIJ_REG)
  376. vfmdb %v2,%v17,\ALPHA_VECREG
  377. vst %v2,16(\CIJ_REG)
  378. la LOCAL_VAR2,0(LOCAL_VAR1,\LDC_BYTE_ORIGINAL )
  379. vfmdb %v1,%v20,\ALPHA_VECREG
  380. vst %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  381. vfmdb %v2,%v21,\ALPHA_VECREG
  382. vst %v2,16(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  383. vfmdb %v1,%v24,\ALPHA_VECREG
  384. vst %v1,0(\CIJ_REG,LOCAL_VAR1)
  385. vfmdb %v2,%v25,\ALPHA_VECREG
  386. vst %v2,16(\CIJ_REG,LOCAL_VAR1)
  387. vfmdb %v1,%v28,\ALPHA_VECREG
  388. vst %v1,0(\CIJ_REG,LOCAL_VAR2)
  389. vfmdb %v2,%v29,\ALPHA_VECREG
  390. vst %v2,16(\CIJ_REG,LOCAL_VAR2)
  391. la \CIJ_REG,32(\CIJ_REG)
  392. .endm
  393. /**************************************Kernel2x4*************************************************/
  394. /*Zero C block Vectors*/
  395. .macro ZERO_CVEC_2x4
  396. vzero %v1 /*a1b1 a1b2 */
  397. vzero %v2 /*a1b3 a1b4 */
  398. vzero %v6 /*a2b1 a2b2 */
  399. vzero %v7 /*a2b3 a2b4 */
  400. .endm
  401. /*Calculate for 2x4_4 C blocks.This Time BroadCast A. but Load B multiple*/
  402. .macro CALC_2x4_4 PTR_A_REG,PTR_B_REG
  403. vl %v4, 0(\PTR_B_REG)
  404. vl %v5,16(\PTR_B_REG)
  405. vlrepg %v3, 0(\PTR_A_REG)
  406. vlrepg %v16, 8(\PTR_A_REG)
  407. vfmadb %v1,%v3,%v4,%v1
  408. vfmadb %v2,%v3,%v5,%v2
  409. vfmadb %v6,%v16,%v4,%v6
  410. vfmadb %v7,%v16,%v5,%v7
  411. vl %v4, 32(\PTR_B_REG)
  412. vl %v5,48(\PTR_B_REG)
  413. vlrepg %v3, 16(\PTR_A_REG)
  414. vlrepg %v16, 24(\PTR_A_REG)
  415. vfmadb %v1,%v3,%v4,%v1
  416. vfmadb %v2,%v3,%v5,%v2
  417. vfmadb %v6,%v16,%v4,%v6
  418. vfmadb %v7,%v16,%v5,%v7
  419. vl %v4, 64(\PTR_B_REG)
  420. vl %v5,80(\PTR_B_REG)
  421. vlrepg %v3, 32(\PTR_A_REG)
  422. vlrepg %v16, 40(\PTR_A_REG)
  423. vfmadb %v1,%v3,%v4,%v1
  424. vfmadb %v2,%v3,%v5,%v2
  425. vfmadb %v6,%v16,%v4,%v6
  426. vfmadb %v7,%v16,%v5,%v7
  427. vl %v4, 96(\PTR_B_REG)
  428. vl %v5,112(\PTR_B_REG)
  429. vlrepg %v3, 48(\PTR_A_REG)
  430. vlrepg %v16, 56(\PTR_A_REG)
  431. vfmadb %v1,%v3,%v4,%v1
  432. vfmadb %v2,%v3,%v5,%v2
  433. la \PTR_B_REG, 128(\PTR_B_REG)
  434. vfmadb %v6,%v16,%v4,%v6
  435. vfmadb %v7,%v16,%v5,%v7
  436. la \PTR_A_REG, 64(\PTR_A_REG)
  437. .endm
  438. /*Calculate for 2x4 C blocks.This Time BroadCast A. but Load B multiple*/
  439. .macro CALC_2x4 PTR_A_REG,PTR_B_REG
  440. vl %v4, 0(\PTR_B_REG)
  441. vl %v5,16(\PTR_B_REG)
  442. vlrepg %v3, 0(\PTR_A_REG)
  443. vlrepg %v16, 8(\PTR_A_REG)
  444. vfmadb %v1,%v3,%v4,%v1
  445. vfmadb %v2,%v3,%v5,%v2
  446. la \PTR_A_REG, 16(\PTR_A_REG)
  447. vfmadb %v6,%v16,%v4,%v6
  448. vfmadb %v7,%v16,%v5,%v7
  449. la \PTR_B_REG, 32(\PTR_B_REG)
  450. .endm
  451. .macro STORE_2x4 ALPHA_REG,CIJ_REG , LDC_BYTE_ORIGINAL
  452. /**/
  453. vfmdb %v1,%v1,\ALPHA_REG
  454. vfmdb %v2,%v2,\ALPHA_REG
  455. vfmdb %v6,%v6,\ALPHA_REG
  456. vfmdb %v7,%v7,\ALPHA_REG
  457. vrepg %v4,%v1,1
  458. vrepg %v5,%v6,1
  459. la LOCAL_VAR1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL)
  460. adb %f1, 0(\CIJ_REG)
  461. std %f1,0(\CIJ_REG)
  462. adb %f6, 8(\CIJ_REG)
  463. std %f6,8(\CIJ_REG)
  464. adb %f4,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  465. std %f4,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  466. adb %f5,8(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  467. std %f5,8(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  468. /*add LDC_BYTE */
  469. la LOCAL_VAR2,0(LOCAL_VAR1,\LDC_BYTE_ORIGINAL )
  470. vrepg %v4,%v2,1
  471. vrepg %v5,%v7,1
  472. adb %f2,0(\CIJ_REG,LOCAL_VAR1)
  473. std %f2,0(\CIJ_REG,LOCAL_VAR1)
  474. adb %f7,8(\CIJ_REG,LOCAL_VAR1)
  475. std %f7,8(\CIJ_REG,LOCAL_VAR1)
  476. adb %f4,0(\CIJ_REG,LOCAL_VAR2)
  477. std %f4,0(\CIJ_REG,LOCAL_VAR2)
  478. adb %f5,8(\CIJ_REG,LOCAL_VAR2)
  479. std %f5,8(\CIJ_REG,LOCAL_VAR2)
  480. la \CIJ_REG,16(\CIJ_REG)
  481. .endm
  482. .macro STORE_TRMM_2x4 ALPHA_REG,CIJ_REG , LDC_BYTE_ORIGINAL
  483. /**/
  484. vfmdb %v1,%v1,\ALPHA_REG
  485. vfmdb %v2,%v2,\ALPHA_REG
  486. vfmdb %v6,%v6,\ALPHA_REG
  487. vfmdb %v7,%v7,\ALPHA_REG
  488. vrepg %v4,%v1,1
  489. vrepg %v5,%v6,1
  490. la LOCAL_VAR1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL)
  491. std %f1,0(\CIJ_REG)
  492. std %f6,8(\CIJ_REG)
  493. std %f4,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  494. std %f5,8(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  495. /*add LDC_BYTE */
  496. la LOCAL_VAR2,0(LOCAL_VAR1,\LDC_BYTE_ORIGINAL )
  497. vrepg %v4,%v2,1
  498. vrepg %v5,%v7,1
  499. std %f2,0(\CIJ_REG,LOCAL_VAR1)
  500. std %f7,8(\CIJ_REG,LOCAL_VAR1)
  501. std %f4,0(\CIJ_REG,LOCAL_VAR2)
  502. std %f5,8(\CIJ_REG,LOCAL_VAR2)
  503. la \CIJ_REG,16(\CIJ_REG)
  504. .endm
  505. /**************************************Kernel1x4*************************************************/
  506. /*Zero C block Vectors*/
  507. .macro ZERO_CVEC_1x4
  508. vzero %v1
  509. vzero %v2
  510. .endm
  511. /*Calculate for 1x4 C blocks.This Time BroadCast A. but Load B multiple*/
  512. .macro CALC_1x4 PTR_A_REG,PTR_B_REG
  513. vl %v4, 0(\PTR_B_REG)
  514. vl %v5,16(\PTR_B_REG)
  515. vlrepg %v3, 0(\PTR_A_REG)
  516. vfmadb %v1,%v3,%v4,%v1
  517. la \PTR_A_REG, 8(\PTR_A_REG)
  518. vfmadb %v2,%v3,%v5,%v2
  519. la \PTR_B_REG, 32(\PTR_B_REG)
  520. .endm
  521. /*Calculate for 1x4_4 C blocks.This Time BroadCast A. but Load B multiple*/
  522. .macro CALC_1x4_4 PTR_A_REG,PTR_B_REG
  523. vl %v4, 0(\PTR_B_REG)
  524. vl %v5,16(\PTR_B_REG)
  525. vlrepg %v3, 0(\PTR_A_REG)
  526. vfmadb %v1,%v3,%v4,%v1
  527. vfmadb %v2,%v3,%v5,%v2
  528. vl %v4, 32(\PTR_B_REG)
  529. vl %v5,48(\PTR_B_REG)
  530. vlrepg %v3, 8(\PTR_A_REG)
  531. vfmadb %v1,%v3,%v4,%v1
  532. vfmadb %v2,%v3,%v5,%v2
  533. vl %v4, 64(\PTR_B_REG)
  534. vl %v5,80(\PTR_B_REG)
  535. vlrepg %v3, 16(\PTR_A_REG)
  536. vfmadb %v1,%v3,%v4,%v1
  537. vfmadb %v2,%v3,%v5,%v2
  538. vl %v4, 96(\PTR_B_REG)
  539. vl %v5,112(\PTR_B_REG)
  540. vlrepg %v3, 24(\PTR_A_REG)
  541. vfmadb %v1,%v3,%v4,%v1
  542. vfmadb %v2,%v3,%v5,%v2
  543. la \PTR_A_REG, 32(\PTR_A_REG)
  544. la \PTR_B_REG, 128(\PTR_B_REG)
  545. .endm
  546. .macro STORE_1x4 ALPHA_REG,CIJ_REG , LDC_BYTE_ORIGINAL
  547. /**/
  548. vfmdb %v1,%v1,\ALPHA_REG
  549. vfmdb %v2,%v2,\ALPHA_REG
  550. vrepg %v4,%v1,1
  551. vrepg %v5,%v2,1
  552. la LOCAL_VAR1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL)
  553. adb %f1, 0(\CIJ_REG)
  554. std %f1,0(\CIJ_REG)
  555. adb %f4,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  556. std %f4,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  557. /*add LDC_BYTE */
  558. la LOCAL_VAR2,0(LOCAL_VAR1,\LDC_BYTE_ORIGINAL )
  559. adb %f2,0(\CIJ_REG,LOCAL_VAR1)
  560. std %f2,0(\CIJ_REG,LOCAL_VAR1)
  561. adb %f5,0(\CIJ_REG,LOCAL_VAR2)
  562. std %f5,0(\CIJ_REG,LOCAL_VAR2)
  563. la \CIJ_REG,8(\CIJ_REG)
  564. .endm
  565. .macro STORE_TRMM_1x4 ALPHA_REG,CIJ_REG , LDC_BYTE_ORIGINAL
  566. /**/
  567. vfmdb %v1,%v1,\ALPHA_REG
  568. vfmdb %v2,%v2,\ALPHA_REG
  569. vrepg %v4,%v1,1
  570. vrepg %v5,%v2,1
  571. la LOCAL_VAR1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL)
  572. std %f1,0(\CIJ_REG)
  573. std %f4,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  574. /*add LDC_BYTE */
  575. la LOCAL_VAR2,0(LOCAL_VAR1,\LDC_BYTE_ORIGINAL )
  576. std %f2,0(\CIJ_REG,LOCAL_VAR1)
  577. std %f5,0(\CIJ_REG,LOCAL_VAR2)
  578. la \CIJ_REG,8(\CIJ_REG)
  579. .endm
  580. /***************************************BN=2 SECTION***************************************/
  581. /*************************************Kernel8x2***************************************************/
  582. /*Zero C block Vectors*/
  583. .macro ZERO_CVEC_8x2
  584. vzero %v16
  585. vzero %v17
  586. vzero %v18
  587. vzero %v19
  588. vzero %v20
  589. vzero %v21
  590. vzero %v22
  591. vzero %v23
  592. .endm
  593. /*Calculate for 8x2 C blocks*/
  594. .macro CALC_8x2 PTR_A_REG,PTR_B_REG
  595. vlrepg %v7, 0(\PTR_B_REG)
  596. vlrepg %v1,8(\PTR_B_REG)
  597. vl %v2, 0(\PTR_A_REG)
  598. vl %v3, 16(\PTR_A_REG)
  599. vl %v4, 32(\PTR_A_REG)
  600. vl %v5, 48(\PTR_A_REG)
  601. vfmadb %v16,%v2,%v7,%v16
  602. vfmadb %v17,%v3,%v7,%v17
  603. vfmadb %v18,%v4,%v7,%v18
  604. vfmadb %v19,%v5,%v7,%v19
  605. vfmadb %v20,%v2,%v1,%v20
  606. vfmadb %v21,%v3,%v1,%v21
  607. la \PTR_A_REG, 64(\PTR_A_REG)
  608. vfmadb %v22,%v4,%v1,%v22
  609. vfmadb %v23,%v5,%v1,%v23
  610. la \PTR_B_REG, 16(\PTR_B_REG)
  611. .endm
  612. /*Calculate for 8x2_4 C blocks*/
  613. .macro CALC_8x2_4 PTR_A_REG,PTR_B_REG
  614. vlrepg %v7, 0(\PTR_B_REG)
  615. vlrepg %v1,8(\PTR_B_REG)
  616. vl %v2, 0(\PTR_A_REG)
  617. vl %v3, 16(\PTR_A_REG)
  618. vl %v4, 32(\PTR_A_REG)
  619. vl %v5, 48(\PTR_A_REG)
  620. vfmadb %v16,%v2,%v7,%v16
  621. vfmadb %v17,%v3,%v7,%v17
  622. vfmadb %v18,%v4,%v7,%v18
  623. vfmadb %v19,%v5,%v7,%v19
  624. vfmadb %v20,%v2,%v1,%v20
  625. vfmadb %v21,%v3,%v1,%v21
  626. vfmadb %v22,%v4,%v1,%v22
  627. vfmadb %v23,%v5,%v1,%v23
  628. vlrepg %v7, 16(\PTR_B_REG)
  629. vlrepg %v1,24(\PTR_B_REG)
  630. vl %v2, 64(\PTR_A_REG)
  631. vl %v3, 80(\PTR_A_REG)
  632. vl %v4, 96(\PTR_A_REG)
  633. vl %v5, 112(\PTR_A_REG)
  634. vfmadb %v16,%v2,%v7,%v16
  635. vfmadb %v17,%v3,%v7,%v17
  636. vfmadb %v18,%v4,%v7,%v18
  637. vfmadb %v19,%v5,%v7,%v19
  638. vfmadb %v20,%v2,%v1,%v20
  639. vfmadb %v21,%v3,%v1,%v21
  640. vfmadb %v22,%v4,%v1,%v22
  641. vfmadb %v23,%v5,%v1,%v23
  642. vlrepg %v7, 32(\PTR_B_REG)
  643. vlrepg %v1,40(\PTR_B_REG)
  644. vl %v2, 128(\PTR_A_REG)
  645. vl %v3, 144(\PTR_A_REG)
  646. vl %v4, 160(\PTR_A_REG)
  647. vl %v5, 176(\PTR_A_REG)
  648. vfmadb %v16,%v2,%v7,%v16
  649. vfmadb %v17,%v3,%v7,%v17
  650. vfmadb %v18,%v4,%v7,%v18
  651. vfmadb %v19,%v5,%v7,%v19
  652. vfmadb %v20,%v2,%v1,%v20
  653. vfmadb %v21,%v3,%v1,%v21
  654. vfmadb %v22,%v4,%v1,%v22
  655. vfmadb %v23,%v5,%v1,%v23
  656. vlrepg %v7, 48(\PTR_B_REG)
  657. vlrepg %v1,56(\PTR_B_REG)
  658. vl %v2, 192(\PTR_A_REG)
  659. vl %v3, 208(\PTR_A_REG)
  660. vl %v4, 224(\PTR_A_REG)
  661. vl %v5, 240(\PTR_A_REG)
  662. vfmadb %v16,%v2,%v7,%v16
  663. vfmadb %v17,%v3,%v7,%v17
  664. vfmadb %v18,%v4,%v7,%v18
  665. vfmadb %v19,%v5,%v7,%v19
  666. la \PTR_B_REG, 64(\PTR_B_REG)
  667. vfmadb %v20,%v2,%v1,%v20
  668. vfmadb %v21,%v3,%v1,%v21
  669. vfmadb %v22,%v4,%v1,%v22
  670. vfmadb %v23,%v5,%v1,%v23
  671. la \PTR_A_REG, 256(\PTR_A_REG)
  672. .endm
  673. /*STORE C8X2*/
  674. .macro STORE_8x2 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  675. vl %v1,0(\CIJ_REG)
  676. vfmadb %v1,%v16,\ALPHA_VECREG,%v1
  677. vst %v1,0(\CIJ_REG)
  678. vl %v2,16(\CIJ_REG)
  679. vfmadb %v2,%v17,\ALPHA_VECREG,%v2
  680. vst %v2,16(\CIJ_REG)
  681. vl %v3,32(\CIJ_REG)
  682. vfmadb %v3,%v18,\ALPHA_VECREG,%v3
  683. vst %v3,32(\CIJ_REG)
  684. vl %v4,48(\CIJ_REG)
  685. vfmadb %v4,%v19,\ALPHA_VECREG,%v4
  686. vst %v4,48(\CIJ_REG)
  687. vl %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  688. vfmadb %v1,%v20,\ALPHA_VECREG,%v1
  689. vst %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  690. vl %v2,16(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  691. vfmadb %v2,%v21,\ALPHA_VECREG,%v2
  692. vst %v2,16(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  693. vl %v3,32(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  694. vfmadb %v3,%v22,\ALPHA_VECREG,%v3
  695. vst %v3,32(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  696. vl %v4,48(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  697. vfmadb %v4,%v23,\ALPHA_VECREG,%v4
  698. vst %v4,48(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  699. la \CIJ_REG,64(\CIJ_REG)
  700. .endm
  701. /*STORE TRMM C8X2*/
  702. .macro STORE_TRMM_8x2 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  703. vfmdb %v1,%v16,\ALPHA_VECREG
  704. vst %v1,0(\CIJ_REG)
  705. vfmdb %v2,%v17,\ALPHA_VECREG
  706. vst %v2,16(\CIJ_REG)
  707. vfmdb %v3,%v18,\ALPHA_VECREG
  708. vst %v3,32(\CIJ_REG)
  709. vfmdb %v4,%v19,\ALPHA_VECREG
  710. vst %v4,48(\CIJ_REG)
  711. vfmdb %v1,%v20,\ALPHA_VECREG
  712. vst %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  713. vfmdb %v2,%v21,\ALPHA_VECREG
  714. vst %v2,16(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  715. vfmdb %v3,%v22,\ALPHA_VECREG
  716. vst %v3,32(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  717. vfmdb %v4,%v23,\ALPHA_VECREG
  718. vst %v4,48(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  719. la \CIJ_REG,64(\CIJ_REG)
  720. .endm
  721. /*************************************Kernel4x2***************************************************/
  722. /*Zero C block Vectors*/
  723. .macro ZERO_CVEC_4x2
  724. vzero %v16
  725. vzero %v17
  726. vzero %v20
  727. vzero %v21
  728. .endm
  729. /*Calculate for 4x2 C blocks*/
  730. .macro CALC_4x2 PTR_A_REG,PTR_B_REG
  731. vlrepg %v7, 0(\PTR_B_REG)
  732. vlrepg %v1,8(\PTR_B_REG)
  733. vl %v2, 0(\PTR_A_REG)
  734. vl %v3, 16(\PTR_A_REG)
  735. vfmadb %v16,%v2,%v7,%v16
  736. vfmadb %v17,%v3,%v7,%v17
  737. la \PTR_A_REG, 32(\PTR_A_REG)
  738. vfmadb %v20,%v2,%v1,%v20
  739. vfmadb %v21,%v3,%v1,%v21
  740. la \PTR_B_REG, 16(\PTR_B_REG)
  741. .endm
  742. /*Calculate for 4x2_4 C blocks*/
  743. .macro CALC_4x2_4 PTR_A_REG,PTR_B_REG
  744. vlrepg %v7, 0(\PTR_B_REG)
  745. vlrepg %v1,8(\PTR_B_REG)
  746. vl %v2, 0(\PTR_A_REG)
  747. vl %v3, 16(\PTR_A_REG)
  748. vfmadb %v16,%v2,%v7,%v16
  749. vfmadb %v17,%v3,%v7,%v17
  750. vfmadb %v20,%v2,%v1,%v20
  751. vfmadb %v21,%v3,%v1,%v21
  752. vlrepg %v7, 16(\PTR_B_REG)
  753. vlrepg %v1,24(\PTR_B_REG)
  754. vl %v2, 32(\PTR_A_REG)
  755. vl %v3, 48(\PTR_A_REG)
  756. vfmadb %v16,%v2,%v7,%v16
  757. vfmadb %v17,%v3,%v7,%v17
  758. vfmadb %v20,%v2,%v1,%v20
  759. vfmadb %v21,%v3,%v1,%v21
  760. vlrepg %v7, 32(\PTR_B_REG)
  761. vlrepg %v1,40(\PTR_B_REG)
  762. vl %v2, 64(\PTR_A_REG)
  763. vl %v3, 80(\PTR_A_REG)
  764. vfmadb %v16,%v2,%v7,%v16
  765. vfmadb %v17,%v3,%v7,%v17
  766. vfmadb %v20,%v2,%v1,%v20
  767. vfmadb %v21,%v3,%v1,%v21
  768. vlrepg %v7, 48(\PTR_B_REG)
  769. vlrepg %v1,56(\PTR_B_REG)
  770. vl %v2, 96(\PTR_A_REG)
  771. vl %v3, 112(\PTR_A_REG)
  772. vfmadb %v16,%v2,%v7,%v16
  773. vfmadb %v17,%v3,%v7,%v17
  774. la \PTR_B_REG, 64(\PTR_B_REG)
  775. vfmadb %v20,%v2,%v1,%v20
  776. vfmadb %v21,%v3,%v1,%v21
  777. la \PTR_A_REG, 128(\PTR_A_REG)
  778. .endm
  779. /*STORE C4x2*/
  780. .macro STORE_4x2 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  781. vl %v1,0(\CIJ_REG)
  782. vfmadb %v1,%v16,\ALPHA_VECREG,%v1
  783. vst %v1,0(\CIJ_REG)
  784. vl %v2,16(\CIJ_REG)
  785. vfmadb %v2,%v17,\ALPHA_VECREG,%v2
  786. vst %v2,16(\CIJ_REG)
  787. vl %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  788. vfmadb %v1,%v20,\ALPHA_VECREG,%v1
  789. vst %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  790. vl %v2,16(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  791. vfmadb %v2,%v21,\ALPHA_VECREG,%v2
  792. vst %v2,16(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  793. la \CIJ_REG,32(\CIJ_REG)
  794. .endm
  795. /*STORE TRMM C4x2*/
  796. .macro STORE_TRMM_4x2 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  797. vfmdb %v1,%v16,\ALPHA_VECREG
  798. vst %v1,0(\CIJ_REG)
  799. vfmdb %v2,%v17,\ALPHA_VECREG
  800. vst %v2,16(\CIJ_REG)
  801. vfmdb %v1,%v20,\ALPHA_VECREG
  802. vst %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  803. vfmdb %v2,%v21,\ALPHA_VECREG
  804. vst %v2,16(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  805. la \CIJ_REG,32(\CIJ_REG)
  806. .endm
  807. /*************************************Kernel2x2***************************************************/
  808. /*Zero C block Vectors*/
  809. .macro ZERO_CVEC_2x2
  810. vzero %v16
  811. vzero %v20
  812. .endm
  813. /*Calculate for 2x2 C blocks*/
  814. .macro CALC_2x2 PTR_A_REG,PTR_B_REG
  815. vlrepg %v7, 0(\PTR_B_REG)
  816. vlrepg %v1,8(\PTR_B_REG)
  817. vl %v2, 0(\PTR_A_REG)
  818. vfmadb %v16,%v2,%v7,%v16
  819. la \PTR_A_REG, 16(\PTR_A_REG)
  820. vfmadb %v20,%v2,%v1,%v20
  821. la \PTR_B_REG, 16(\PTR_B_REG)
  822. .endm
  823. /*Calculate for 2x2_4 C blocks*/
  824. .macro CALC_2x2_4 PTR_A_REG,PTR_B_REG
  825. vlrepg %v7, 0(\PTR_B_REG)
  826. vlrepg %v1,8(\PTR_B_REG)
  827. vl %v2, 0(\PTR_A_REG)
  828. vfmadb %v16,%v2,%v7,%v16
  829. vfmadb %v20,%v2,%v1,%v20
  830. vlrepg %v7, 16(\PTR_B_REG)
  831. vlrepg %v1,24(\PTR_B_REG)
  832. vl %v2, 16(\PTR_A_REG)
  833. vfmadb %v16,%v2,%v7,%v16
  834. vfmadb %v20,%v2,%v1,%v20
  835. vlrepg %v7, 32(\PTR_B_REG)
  836. vlrepg %v1,40(\PTR_B_REG)
  837. vl %v2, 32(\PTR_A_REG)
  838. vfmadb %v16,%v2,%v7,%v16
  839. vfmadb %v20,%v2,%v1,%v20
  840. vlrepg %v7, 48(\PTR_B_REG)
  841. vlrepg %v1,56(\PTR_B_REG)
  842. vl %v2, 48(\PTR_A_REG)
  843. vfmadb %v16,%v2,%v7,%v16
  844. vfmadb %v20,%v2,%v1,%v20
  845. la \PTR_B_REG, 64(\PTR_B_REG)
  846. la \PTR_A_REG, 64(\PTR_A_REG)
  847. .endm
  848. /*STORE C2x2*/
  849. .macro STORE_2x2 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  850. vl %v1,0(\CIJ_REG)
  851. vfmadb %v1,%v16,\ALPHA_VECREG,%v1
  852. vst %v1,0(\CIJ_REG)
  853. vl %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  854. vfmadb %v1,%v20,\ALPHA_VECREG,%v1
  855. vst %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  856. la \CIJ_REG,16(\CIJ_REG)
  857. .endm
  858. /*STORE TRMM C2x2*/
  859. .macro STORE_TRMM_2x2 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  860. vfmdb %v1,%v16,\ALPHA_VECREG
  861. vst %v1,0(\CIJ_REG)
  862. vfmdb %v1,%v20,\ALPHA_VECREG
  863. vst %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  864. la \CIJ_REG,16(\CIJ_REG)
  865. .endm
  866. /**************************************Kernel1x2*************************************************/
  867. /*Zero C block Vectors*/
  868. .macro ZERO_CVEC_1x2
  869. vzero %v1
  870. .endm
  871. /*Calculate for 1x2 C blocks.This Time BroadCast A. but Load B multiple*/
  872. .macro CALC_1x2 PTR_A_REG,PTR_B_REG
  873. vl %v4, 0(\PTR_B_REG)
  874. vlrepg %v3, 0(\PTR_A_REG)
  875. la \PTR_B_REG, 16(\PTR_B_REG)
  876. vfmadb %v1,%v3,%v4,%v1
  877. la \PTR_A_REG, 8(\PTR_A_REG)
  878. .endm
  879. .macro CALC_1x2_4 PTR_A_REG,PTR_B_REG
  880. vl %v4, 0(\PTR_B_REG)
  881. vlrepg %v3, 0(\PTR_A_REG)
  882. vfmadb %v1,%v3,%v4,%v1
  883. vl %v4, 16(\PTR_B_REG)
  884. vlrepg %v3, 8(\PTR_A_REG)
  885. vfmadb %v1,%v3,%v4,%v1
  886. vl %v4, 32(\PTR_B_REG)
  887. vlrepg %v3, 16(\PTR_A_REG)
  888. vfmadb %v1,%v3,%v4,%v1
  889. vl %v4, 48(\PTR_B_REG)
  890. vlrepg %v3, 24(\PTR_A_REG)
  891. vfmadb %v1,%v3,%v4,%v1
  892. la \PTR_B_REG, 64(\PTR_B_REG)
  893. la \PTR_A_REG, 32(\PTR_A_REG)
  894. .endm
  895. .macro STORE_1x2 ALPHA_REG,CIJ_REG , LDC_BYTE_ORIGINAL
  896. /**/
  897. vfmdb %v1,%v1,\ALPHA_REG
  898. vrepg %v4,%v1,1
  899. adb %f1, 0(\CIJ_REG)
  900. std %f1,0(\CIJ_REG)
  901. adb %f4,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  902. std %f4,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  903. la \CIJ_REG,8(\CIJ_REG)
  904. .endm
  905. .macro STORE_TRMM_1x2 ALPHA_REG,CIJ_REG , LDC_BYTE_ORIGINAL
  906. /**/
  907. vfmdb %v1,%v1,\ALPHA_REG
  908. vrepg %v4,%v1,1
  909. std %f1,0(\CIJ_REG)
  910. std %f4,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  911. la \CIJ_REG,8(\CIJ_REG)
  912. .endm
  913. /**************************************BN=1*******************************************************/
  914. /*************************************Kernel8x1***************************************************/
  915. /*Zero C block Vectors*/
  916. .macro ZERO_CVEC_8x1
  917. vzero %v16
  918. vzero %v17
  919. vzero %v18
  920. vzero %v19
  921. .endm
  922. /*Calculate for 8x1 C blocks*/
  923. .macro CALC_8x1 PTR_A_REG,PTR_B_REG
  924. vlrepg %v7, 0(\PTR_B_REG)
  925. vl %v2, 0(\PTR_A_REG)
  926. vl %v3, 16(\PTR_A_REG)
  927. vl %v4, 32(\PTR_A_REG)
  928. vl %v5, 48(\PTR_A_REG)
  929. la \PTR_B_REG, 8(\PTR_B_REG)
  930. vfmadb %v16,%v2,%v7,%v16
  931. vfmadb %v17,%v3,%v7,%v17
  932. vfmadb %v18,%v4,%v7,%v18
  933. la \PTR_A_REG, 64(\PTR_A_REG)
  934. vfmadb %v19,%v5,%v7,%v19
  935. .endm
  936. /*Calculate for 8x1_4 C blocks*/
  937. .macro CALC_8x1_4 PTR_A_REG,PTR_B_REG
  938. vlrepg %v7, 0(\PTR_B_REG)
  939. vl %v2, 0(\PTR_A_REG)
  940. vl %v3, 16(\PTR_A_REG)
  941. vl %v4, 32(\PTR_A_REG)
  942. vl %v5, 48(\PTR_A_REG)
  943. vfmadb %v16,%v2,%v7,%v16
  944. vfmadb %v17,%v3,%v7,%v17
  945. vfmadb %v18,%v4,%v7,%v18
  946. vfmadb %v19,%v5,%v7,%v19
  947. vlrepg %v7, 8(\PTR_B_REG)
  948. vl %v2, 64(\PTR_A_REG)
  949. vl %v3, 80(\PTR_A_REG)
  950. vl %v4, 96(\PTR_A_REG)
  951. vl %v5, 112(\PTR_A_REG)
  952. vfmadb %v16,%v2,%v7,%v16
  953. vfmadb %v17,%v3,%v7,%v17
  954. vfmadb %v18,%v4,%v7,%v18
  955. vfmadb %v19,%v5,%v7,%v19
  956. vlrepg %v7, 16(\PTR_B_REG)
  957. vl %v2, 128(\PTR_A_REG)
  958. vl %v3, 144(\PTR_A_REG)
  959. vl %v4, 160(\PTR_A_REG)
  960. vl %v5, 176(\PTR_A_REG)
  961. vfmadb %v16,%v2,%v7,%v16
  962. vfmadb %v17,%v3,%v7,%v17
  963. vfmadb %v18,%v4,%v7,%v18
  964. vfmadb %v19,%v5,%v7,%v19
  965. vlrepg %v7, 24(\PTR_B_REG)
  966. vl %v2, 192(\PTR_A_REG)
  967. vl %v3, 208(\PTR_A_REG)
  968. vl %v4, 224(\PTR_A_REG)
  969. vl %v5, 240(\PTR_A_REG)
  970. vfmadb %v16,%v2,%v7,%v16
  971. vfmadb %v17,%v3,%v7,%v17
  972. vfmadb %v18,%v4,%v7,%v18
  973. vfmadb %v19,%v5,%v7,%v19
  974. la \PTR_A_REG, 256(\PTR_A_REG)
  975. la \PTR_B_REG, 32(\PTR_B_REG)
  976. .endm
  977. /*STORE C8X1*/
  978. .macro STORE_8x1 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  979. vl %v1,0(\CIJ_REG)
  980. vfmadb %v1,%v16,\ALPHA_VECREG,%v1
  981. vst %v1,0(\CIJ_REG)
  982. vl %v2,16(\CIJ_REG)
  983. vfmadb %v2,%v17,\ALPHA_VECREG,%v2
  984. vst %v2,16(\CIJ_REG)
  985. vl %v3,32(\CIJ_REG)
  986. vfmadb %v3,%v18,\ALPHA_VECREG,%v3
  987. vst %v3,32(\CIJ_REG)
  988. vl %v4,48(\CIJ_REG)
  989. vfmadb %v4,%v19,\ALPHA_VECREG,%v4
  990. vst %v4,48(\CIJ_REG)
  991. la \CIJ_REG,64(\CIJ_REG)
  992. .endm
  993. /*STORE TRMM C8X1*/
  994. .macro STORE_TRMM_8x1 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  995. vfmdb %v1,%v16,\ALPHA_VECREG
  996. vst %v1,0(\CIJ_REG)
  997. vfmdb %v2,%v17,\ALPHA_VECREG
  998. vst %v2,16(\CIJ_REG)
  999. vfmdb %v3,%v18,\ALPHA_VECREG
  1000. vst %v3,32(\CIJ_REG)
  1001. vfmdb %v4,%v19,\ALPHA_VECREG
  1002. vst %v4,48(\CIJ_REG)
  1003. la \CIJ_REG,64(\CIJ_REG)
  1004. .endm
  1005. /*************************************Kernel4x1***************************************************/
  1006. /*Zero C block Vectors*/
  1007. .macro ZERO_CVEC_4x1
  1008. vzero %v16
  1009. vzero %v17
  1010. .endm
  1011. /*Calculate for 4x1 C blocks*/
  1012. .macro CALC_4x1 PTR_A_REG,PTR_B_REG
  1013. vlrepg %v7, 0(\PTR_B_REG)
  1014. vl %v2, 0(\PTR_A_REG)
  1015. vl %v3, 16(\PTR_A_REG)
  1016. la \PTR_B_REG, 8(\PTR_B_REG)
  1017. vfmadb %v16,%v2,%v7,%v16
  1018. vfmadb %v17,%v3,%v7,%v17
  1019. la \PTR_A_REG, 32(\PTR_A_REG)
  1020. .endm
  1021. /*Calculate for 4x1_4 C blocks*/
  1022. .macro CALC_4x1_4 PTR_A_REG,PTR_B_REG
  1023. vlrepg %v7, 0(\PTR_B_REG)
  1024. vl %v2, 0(\PTR_A_REG)
  1025. vl %v3, 16(\PTR_A_REG)
  1026. vfmadb %v16,%v2,%v7,%v16
  1027. vfmadb %v17,%v3,%v7,%v17
  1028. vlrepg %v7, 8(\PTR_B_REG)
  1029. vl %v2, 32(\PTR_A_REG)
  1030. vl %v3, 48(\PTR_A_REG)
  1031. vfmadb %v16,%v2,%v7,%v16
  1032. vfmadb %v17,%v3,%v7,%v17
  1033. vlrepg %v7, 16(\PTR_B_REG)
  1034. vl %v2, 64(\PTR_A_REG)
  1035. vl %v3, 80(\PTR_A_REG)
  1036. vfmadb %v16,%v2,%v7,%v16
  1037. vfmadb %v17,%v3,%v7,%v17
  1038. vlrepg %v7, 24(\PTR_B_REG)
  1039. vl %v2, 96(\PTR_A_REG)
  1040. vl %v3, 112(\PTR_A_REG)
  1041. vfmadb %v16,%v2,%v7,%v16
  1042. vfmadb %v17,%v3,%v7,%v17
  1043. la \PTR_B_REG, 32(\PTR_B_REG)
  1044. la \PTR_A_REG, 128(\PTR_A_REG)
  1045. .endm
  1046. /*STORE C4X1*/
  1047. .macro STORE_4x1 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  1048. vl %v1,0(\CIJ_REG)
  1049. vfmadb %v1,%v16,\ALPHA_VECREG,%v1
  1050. vst %v1,0(\CIJ_REG)
  1051. vl %v2,16(\CIJ_REG)
  1052. vfmadb %v2,%v17,\ALPHA_VECREG,%v2
  1053. vst %v2,16(\CIJ_REG)
  1054. la \CIJ_REG,32(\CIJ_REG)
  1055. .endm
  1056. /*STORE TRMM C4X1*/
  1057. .macro STORE_TRMM_4x1 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  1058. vfmdb %v1,%v16,\ALPHA_VECREG
  1059. vst %v1,0(\CIJ_REG)
  1060. vfmdb %v2,%v17,\ALPHA_VECREG
  1061. vst %v2,16(\CIJ_REG)
  1062. la \CIJ_REG,32(\CIJ_REG)
  1063. .endm
  1064. /*************************************Kernel2x1***************************************************/
  1065. /*Zero C block Vectors*/
  1066. .macro ZERO_CVEC_2x1
  1067. vzero %v16
  1068. .endm
  1069. /*Calculate for 2x1 C blocks*/
  1070. .macro CALC_2x1 PTR_A_REG,PTR_B_REG
  1071. vlrepg %v7, 0(\PTR_B_REG)
  1072. vl %v2, 0(\PTR_A_REG)
  1073. la \PTR_B_REG, 8(\PTR_B_REG)
  1074. vfmadb %v16,%v2,%v7,%v16
  1075. la \PTR_A_REG, 16(\PTR_A_REG)
  1076. .endm
  1077. /*Calculate for 2x1_4 C blocks*/
  1078. .macro CALC_2x1_4 PTR_A_REG,PTR_B_REG
  1079. vlrepg %v7, 0(\PTR_B_REG)
  1080. vl %v2, 0(\PTR_A_REG)
  1081. vfmadb %v16,%v2,%v7,%v16
  1082. vlrepg %v7, 8(\PTR_B_REG)
  1083. vl %v2, 16(\PTR_A_REG)
  1084. vfmadb %v16,%v2,%v7,%v16
  1085. vlrepg %v7, 16(\PTR_B_REG)
  1086. vl %v2, 32(\PTR_A_REG)
  1087. vfmadb %v16,%v2,%v7,%v16
  1088. vlrepg %v7, 24(\PTR_B_REG)
  1089. vl %v2, 48(\PTR_A_REG)
  1090. vfmadb %v16,%v2,%v7,%v16
  1091. la \PTR_B_REG, 32(\PTR_B_REG)
  1092. la \PTR_A_REG, 64(\PTR_A_REG)
  1093. .endm
  1094. /*STORE C2X1*/
  1095. .macro STORE_2x1 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  1096. vl %v1,0(\CIJ_REG)
  1097. vfmadb %v1,%v16,\ALPHA_VECREG,%v1
  1098. vst %v1,0(\CIJ_REG)
  1099. la \CIJ_REG,16(\CIJ_REG)
  1100. .endm
  1101. /*STORE TRMM C2X1*/
  1102. .macro STORE_TRMM_2x1 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  1103. vfmdb %v1,%v16,\ALPHA_VECREG
  1104. vst %v1,0(\CIJ_REG)
  1105. la \CIJ_REG,16(\CIJ_REG)
  1106. .endm
  1107. /*************************************Kernel1x1***************************************************/
  1108. /*Zero C block Vectors*/
  1109. .macro ZERO_CVEC_1x1
  1110. LZDR %f1
  1111. .endm
  1112. /*Calculate for 1x1 C blocks*/
  1113. .macro CALC_1x1 PTR_A_REG,PTR_B_REG
  1114. ld %f2,0(\PTR_A_REG) /**a*/
  1115. la \PTR_A_REG,8(\PTR_A_REG)
  1116. madb %f1,%f2,0(\PTR_B_REG)
  1117. la \PTR_B_REG,8(\PTR_B_REG)
  1118. .endm
  1119. /*Calculate for 1x1_4 C blocks*/
  1120. .macro CALC_1x1_4 PTR_A_REG,PTR_B_REG
  1121. ld %f2,0(\PTR_A_REG) /**a*/
  1122. madb %f1,%f2,0(\PTR_B_REG)
  1123. ld %f2,8(\PTR_A_REG) /**a*/
  1124. madb %f1,%f2,8(\PTR_B_REG)
  1125. ld %f2,16(\PTR_A_REG) /**a*/
  1126. madb %f1,%f2,16(\PTR_B_REG)
  1127. ld %f2,24(\PTR_A_REG) /**a*/
  1128. madb %f1,%f2,24(\PTR_B_REG)
  1129. la \PTR_A_REG,32(\PTR_A_REG)
  1130. la \PTR_B_REG,32(\PTR_B_REG)
  1131. .endm
  1132. /*STORE C1X1*/
  1133. .macro STORE_1x1 ALPHA_FLOAT,CIJ_REG,LDC_BYTE_ORIGINAL
  1134. ld %f2,0(CIJ_LOCAL)
  1135. madbr %f2,%f1,\ALPHA_FLOAT
  1136. std %f2,0(CIJ_LOCAL)
  1137. la \CIJ_REG,8(\CIJ_REG)
  1138. .endm
  1139. /*STORE C1X1*/
  1140. .macro STORE_TRMM_1x1 ALPHA_FLOAT,CIJ_REG,LDC_BYTE_ORIGINAL
  1141. mdbr %f1,\ALPHA_FLOAT
  1142. std %f1,0(CIJ_LOCAL)
  1143. la \CIJ_REG,8(\CIJ_REG)
  1144. .endm
  1145. /****************************TRMM POINTER REFRESH MACROSES*************************/
  1146. .macro RefreshPointers PTR_A,PTR_B,OFF_VAL,B_VAL,C_A,C_B
  1147. #if (defined(LEFT) && defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA))
  1148. /* ptrbb = bb;*/
  1149. lgr \PTR_B,\B_VAL /*refresh BPOINT*/
  1150. #else
  1151. /* ptrba =ptrba+ off*C_A;
  1152. ptrbb = bb + off*C_B;*/
  1153. .if \C_B==4
  1154. .if \C_A==8
  1155. sllg \PTR_B, \OFF_VAL,5
  1156. la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*4*/
  1157. agr \PTR_A,\PTR_B /*ptrba+off*4**/
  1158. la \PTR_B,0(\B_VAL,\PTR_B)
  1159. .elseif \C_A==4
  1160. sllg \PTR_B, \OFF_VAL,5
  1161. agr \PTR_A,\PTR_B /*ptrba+off*4**/
  1162. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  1163. .elseif \C_A==2
  1164. sllg \PTR_B, \OFF_VAL,4
  1165. la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*2**/
  1166. agr \PTR_B, \PTR_B
  1167. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  1168. .elseif \C_A==1
  1169. sllg \PTR_B, \OFF_VAL,3
  1170. agr \PTR_A,\PTR_B /*ptrba+off*4**/
  1171. sllg \PTR_B, \OFF_VAL,5
  1172. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  1173. .endif
  1174. .elseif \C_B==2
  1175. .if \C_A==8
  1176. sllg \PTR_B, \OFF_VAL,6
  1177. agr \PTR_A,\PTR_B /*ptrba+off*8**/
  1178. sllg \PTR_B, \OFF_VAL,4
  1179. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  1180. .elseif \C_A==4
  1181. sllg \PTR_B, \OFF_VAL,4
  1182. la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*2**/
  1183. agr \PTR_A,\PTR_B /*ptrba+off*2**/
  1184. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  1185. .elseif \C_A==2
  1186. sllg \PTR_B, \OFF_VAL,4
  1187. agr \PTR_A,\PTR_B /*ptrba+off*2**/
  1188. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  1189. .elseif \C_A==1
  1190. sllg \PTR_B, \OFF_VAL,3
  1191. la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*1**/
  1192. agr \PTR_B,\PTR_B /* off+off**/
  1193. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  1194. .endif
  1195. .elseif \C_B==1
  1196. .if \C_A==8
  1197. sllg \PTR_B, \OFF_VAL,6
  1198. agr \PTR_A,\PTR_B /*ptrba+off*8**/
  1199. sllg \PTR_B, \OFF_VAL,3
  1200. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  1201. .elseif \C_A==4
  1202. sllg \PTR_B, \OFF_VAL,5
  1203. agr \PTR_A,\PTR_B /*ptrba+off*4**/
  1204. sllg \PTR_B, \OFF_VAL,3
  1205. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  1206. .elseif \C_A==2
  1207. sllg \PTR_B, \OFF_VAL,3
  1208. la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*1**/
  1209. agr \PTR_A,\PTR_B /*ptrba+off*1**/
  1210. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  1211. .elseif \C_A==1
  1212. sllg \PTR_B, \OFF_VAL,3
  1213. agr \PTR_A,\PTR_B /*ptrba+off*1**/
  1214. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  1215. .endif
  1216. .endif
  1217. #endif
  1218. .endm
  1219. /**/
  1220. .macro RefreshTempBk TEMP_VAL,BK_VAL,OFF_VAL,INCR_A,INCR_B
  1221. #if (defined(LEFT) && !defined(TRANSA)) || (!defined(LEFT) && defined(TRANSA))
  1222. /* temp = bk-off;*/
  1223. sgrk \TEMP_VAL,\BK_VAL,\OFF_VAL
  1224. #elif defined(LEFT)
  1225. /* temp = off+INCR_A; // number of values in A */
  1226. la \TEMP_VAL,\INCR_A(\OFF_VAL)
  1227. #else
  1228. /* temp = off+INCR_B // number of values in B*/
  1229. la \TEMP_VAL,\INCR_B(\OFF_VAL)
  1230. #endif
  1231. .endm
  1232. .macro RefreshPointersAndOFF TEMP_VAL,BK_VAL,OFF_VAL,PTR_B,PTR_A,C_A,C_B
  1233. #if ( defined(LEFT) && defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA))
  1234. /*temp = bk - off;*/
  1235. sgrk \TEMP_VAL,\BK_VAL,\OFF_VAL
  1236. #ifdef LEFT
  1237. /*temp -= 8; // number of values in A*/
  1238. lay \TEMP_VAL,-\C_A(\TEMP_VAL)
  1239. #else
  1240. /*temp -= 4; // number of values in B*/
  1241. lay \TEMP_VAL,-\C_B(\TEMP_VAL)
  1242. #endif
  1243. /*ptrba += temp*C_A;
  1244. ptrbb += temp*C_B;*/
  1245. .if \C_A==8
  1246. sllg \TEMP_VAL, \TEMP_VAL,6
  1247. .elseif \C_A==4
  1248. sllg \TEMP_VAL, \TEMP_VAL,5 /*temp*4*/
  1249. .elseif \C_A==2
  1250. sllg \TEMP_VAL, \TEMP_VAL,4 /*temp*2*/
  1251. .elseif \C_A==1
  1252. sllg \TEMP_VAL, \TEMP_VAL,3 /*temp*1*/
  1253. .endif
  1254. la \PTR_A,0(\PTR_A,\TEMP_VAL) /*ptrba+temp*C_A*/
  1255. /*we do not need to refresh ptrbb. so lets ignore it*/
  1256. #endif
  1257. #ifdef LEFT
  1258. /*off += 8; // number of values in A*/
  1259. aghi \OFF_VAL,\C_A
  1260. #endif
  1261. .endm