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.

skernelMacros.S 33 kB

8 years ago
8 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143
  1. /**********************************Zero Vectors**************************************************/
  2. .macro ZERO_CVEC_8x4
  3. vzero %v16
  4. vzero %v17
  5. vzero %v18
  6. vzero %v19
  7. vzero %v20
  8. vzero %v21
  9. vzero %v22
  10. vzero %v23
  11. vzero %v24
  12. vzero %v25
  13. vzero %v26
  14. vzero %v27
  15. vzero %v28
  16. vzero %v29
  17. vzero %v30
  18. vzero %v31
  19. .endm
  20. .macro ZERO_CVEC_8x2
  21. vzero %v16
  22. vzero %v17
  23. vzero %v18
  24. vzero %v19
  25. vzero %v20
  26. vzero %v21
  27. vzero %v22
  28. vzero %v23
  29. .endm
  30. .macro ZERO_CVEC_8x1
  31. vzero %v16
  32. vzero %v17
  33. vzero %v18
  34. vzero %v19
  35. .endm
  36. .macro ZERO_CVEC_4x4
  37. vzero %v16
  38. vzero %v17
  39. vzero %v20
  40. vzero %v21
  41. vzero %v24
  42. vzero %v25
  43. vzero %v28
  44. vzero %v29
  45. .endm
  46. .macro ZERO_CVEC_4x2
  47. vzero %v16
  48. vzero %v17
  49. vzero %v20
  50. vzero %v21
  51. .endm
  52. .macro ZERO_CVEC_4x1
  53. lzer %f1
  54. lzer %f2
  55. lzer %f3
  56. lzer %f4
  57. .endm
  58. .macro ZERO_CVEC_2x4
  59. vzero %v16
  60. vzero %v17
  61. vzero %v20
  62. vzero %v21
  63. .endm
  64. .macro ZERO_CVEC_2x2
  65. vzero %v16
  66. vzero %v20
  67. .endm
  68. .macro ZERO_CVEC_2x1
  69. lzer %f1
  70. lzer %f2
  71. .endm
  72. .macro ZERO_CVEC_1x4
  73. lzer %f1
  74. lzer %f2
  75. lzer %f3
  76. lzer %f4
  77. .endm
  78. .macro ZERO_CVEC_1x2
  79. lzer %f1
  80. lzer %f2
  81. .endm
  82. .macro ZERO_CVEC_1x1
  83. lzer %f1
  84. .endm
  85. /***********************************Helper Calculations*************************************/
  86. #define unit_size 4
  87. #define DISP(ind,stride,disp) (ind*stride+disp)
  88. #define DISP8(ind,disp) (ind*unit_size*8+disp)
  89. #define DISP4(ind,disp) (ind*unit_size*4+disp)
  90. #define DISP2(ind,disp) (ind*unit_size*2+disp)
  91. #define DISP1(ind,disp) (ind*unit_size+disp)
  92. #define N8 (8*unit_size)
  93. #define N4 (4*unit_size)
  94. #define N2 (2*unit_size)
  95. #define N1 (1*unit_size)
  96. .macro Calculate_8x4_I PTR_A_REG,PTR_B_REG,Index,IsLast
  97. vlm %v1,%v2, DISP8(\Index , 0)(\PTR_A_REG)
  98. vmrhf %v3,%v1,%v1
  99. vmrhf %v5,%v2,%v2
  100. vmrlf %v4,%v1,%v1
  101. vmrlf %v6,%v2,%v2
  102. vldeb %v3, %v3
  103. vldeb %v4, %v4
  104. vldeb %v5, %v5
  105. vlrepf %v7, DISP4(\Index ,0)(\PTR_B_REG)
  106. vlrepf %v1, DISP4(\Index ,4)(\PTR_B_REG)
  107. vldeb %v6, %v6
  108. vldeb %v7, %v7
  109. vldeb %v1, %v1
  110. vfmadb %v16,%v3,%v7,%v16
  111. vfmadb %v17,%v4,%v7,%v17
  112. vfmadb %v18,%v5,%v7,%v18
  113. vfmadb %v19,%v6,%v7,%v19
  114. vfmadb %v20,%v3,%v1,%v20
  115. vfmadb %v21,%v4,%v1,%v21
  116. vfmadb %v22,%v5,%v1,%v22
  117. vfmadb %v23,%v6,%v1,%v23
  118. vlrepf %v2, DISP4(\Index ,8)(\PTR_B_REG)
  119. vlrepf %v7, DISP4(\Index ,12)(\PTR_B_REG)
  120. vldeb %v2, %v2
  121. vldeb %v7, %v7
  122. .if \IsLast==1
  123. la \PTR_A_REG, DISP8(\Index ,N8)(\PTR_A_REG)
  124. .endif
  125. vfmadb %v24,%v3,%v2,%v24
  126. vfmadb %v25,%v4,%v2,%v25
  127. vfmadb %v26,%v5,%v2,%v26
  128. vfmadb %v27,%v6,%v2,%v27
  129. vfmadb %v28,%v3,%v7,%v28
  130. vfmadb %v29,%v4,%v7,%v29
  131. vfmadb %v30,%v5,%v7,%v30
  132. vfmadb %v31,%v6,%v7,%v31
  133. .if \IsLast==1
  134. la \PTR_B_REG, DISP4(\Index ,N4)(\PTR_B_REG)
  135. .endif
  136. .endm
  137. .macro Calculate_8x2_I PTR_A_REG,PTR_B_REG,Index,IsLast
  138. vlm %v1,%v2, DISP8(\Index , 0)(\PTR_A_REG)
  139. vmrhf %v3,%v1,%v1
  140. vmrhf %v5,%v2,%v2
  141. vmrlf %v4,%v1,%v1
  142. vmrlf %v6,%v2,%v2
  143. vldeb %v3, %v3
  144. vldeb %v4, %v4
  145. vldeb %v5, %v5
  146. vlrepf %v7, DISP2(\Index ,0)(\PTR_B_REG)
  147. vlrepf %v1, DISP2(\Index ,4)(\PTR_B_REG)
  148. vldeb %v6, %v6
  149. vldeb %v7, %v7
  150. vldeb %v1, %v1
  151. vfmadb %v16,%v3,%v7,%v16
  152. vfmadb %v17,%v4,%v7,%v17
  153. vfmadb %v18,%v5,%v7,%v18
  154. vfmadb %v19,%v6,%v7,%v19
  155. vfmadb %v20,%v3,%v1,%v20
  156. vfmadb %v21,%v4,%v1,%v21
  157. .if \IsLast==1
  158. la \PTR_A_REG, DISP8(\Index ,N8)(\PTR_A_REG)
  159. .endif
  160. vfmadb %v22,%v5,%v1,%v22
  161. vfmadb %v23,%v6,%v1,%v23
  162. .if \IsLast==1
  163. la \PTR_B_REG, DISP2(\Index ,N2)(\PTR_B_REG)
  164. .endif
  165. .endm
  166. .macro Calculate_8x1_I PTR_A_REG,PTR_B_REG,Index,IsLast
  167. vlm %v1,%v2, DISP8(\Index , 0)(\PTR_A_REG)
  168. vmrhf %v3,%v1,%v1
  169. vmrhf %v5,%v2,%v2
  170. vmrlf %v4,%v1,%v1
  171. vmrlf %v6,%v2,%v2
  172. vldeb %v3, %v3
  173. vldeb %v4, %v4
  174. vldeb %v5, %v5
  175. vlrepf %v7, DISP1(\Index ,0)(\PTR_B_REG)
  176. vldeb %v6, %v6
  177. vldeb %v7, %v7
  178. vfmadb %v16,%v3,%v7,%v16
  179. .if \IsLast==1
  180. la \PTR_B_REG, DISP1(\Index ,N1)(\PTR_B_REG)
  181. .endif
  182. vfmadb %v17,%v4,%v7,%v17
  183. vfmadb %v18,%v5,%v7,%v18
  184. vfmadb %v19,%v6,%v7,%v19
  185. .if \IsLast==1
  186. la \PTR_A_REG, DISP8(\Index ,N8)(\PTR_A_REG)
  187. .endif
  188. .endm
  189. .macro Calculate_4x4_I PTR_A_REG,PTR_B_REG,Index,IsLast
  190. vl %v5, DISP4(\Index , 0)(\PTR_A_REG)
  191. vlrepf %v7, DISP4(\Index ,0)(\PTR_B_REG)
  192. vlrepf %v1, DISP4(\Index ,4)(\PTR_B_REG)
  193. vmrhf %v2,%v5,%v5
  194. vmrlf %v3,%v5,%v5
  195. vldeb %v2, %v2
  196. vldeb %v3, %v3
  197. vldeb %v7, %v7
  198. vldeb %v1, %v1
  199. vfmadb %v16,%v2,%v7,%v16
  200. vfmadb %v17,%v3,%v7,%v17
  201. vfmadb %v20,%v2,%v1,%v20
  202. vfmadb %v21,%v3,%v1,%v21
  203. vlrepf %v7, DISP4(\Index ,8)(\PTR_B_REG)
  204. vlrepf %v1, DISP4(\Index ,12)(\PTR_B_REG)
  205. vldeb %v7, %v7
  206. vldeb %v1, %v1
  207. .if \IsLast==1
  208. la \PTR_A_REG, DISP4(\Index ,N4)(\PTR_A_REG)
  209. .endif
  210. vfmadb %v24,%v2,%v7,%v24
  211. vfmadb %v25,%v3,%v7,%v25
  212. vfmadb %v28,%v2,%v1,%v28
  213. vfmadb %v29,%v3,%v1,%v29
  214. .if \IsLast==1
  215. la \PTR_B_REG, DISP4(\Index ,N4)(\PTR_B_REG)
  216. .endif
  217. .endm
  218. .macro Calculate_4x2_I PTR_A_REG,PTR_B_REG,Index,IsLast
  219. vl %v5, DISP4(\Index , 0)(\PTR_A_REG)
  220. vlrepf %v7, DISP2(\Index ,0)(\PTR_B_REG)
  221. vlrepf %v1, DISP2(\Index ,4)(\PTR_B_REG)
  222. vmrhf %v2,%v5,%v5
  223. vmrlf %v3,%v5,%v5
  224. vldeb %v2, %v2
  225. vldeb %v3, %v3
  226. vldeb %v7, %v7
  227. vldeb %v1, %v1
  228. vfmadb %v16,%v2,%v7,%v16
  229. vfmadb %v17,%v3,%v7,%v17
  230. .if \IsLast==1
  231. la \PTR_B_REG, DISP2(\Index ,N2)(\PTR_B_REG)
  232. .endif
  233. vfmadb %v20,%v2,%v1,%v20
  234. vfmadb %v21,%v3,%v1,%v21
  235. .if \IsLast==1
  236. la \PTR_A_REG, DISP4(\Index ,N4)(\PTR_A_REG)
  237. .endif
  238. .endm
  239. .macro Calculate_4x1_I PTR_A_REG,PTR_B_REG,Index,IsLast
  240. le %f5,DISP1(\Index ,0)(\PTR_B_REG)
  241. maeb %f1,%f5,DISP4(\Index ,0)(\PTR_A_REG)
  242. maeb %f2,%f5,DISP4(\Index ,4)(\PTR_A_REG)
  243. .if \IsLast==1
  244. la \PTR_B_REG, DISP1(\Index ,N1)(\PTR_B_REG)
  245. .endif
  246. maeb %f3,%f5,DISP4(\Index ,8)(\PTR_A_REG)
  247. maeb %f4,%f5,DISP4(\Index ,12)(\PTR_A_REG)
  248. .if \IsLast==1
  249. la \PTR_A_REG, DISP4(\Index ,N4)(\PTR_A_REG)
  250. .endif
  251. .endm
  252. .macro Calculate_2x2_I PTR_A_REG,PTR_B_REG,Index,IsLast
  253. vlrepf %v7, DISP2(\Index ,0)(\PTR_B_REG)
  254. vlrepf %v1, DISP2(\Index ,4)(\PTR_B_REG)
  255. vlef %v2, DISP2(\Index ,0)(\PTR_A_REG) ,0
  256. vlef %v2, DISP2(\Index ,4)(\PTR_A_REG) ,2
  257. vldeb %v7, %v7
  258. vldeb %v2,%v2
  259. vldeb %v1, %v1
  260. vfmadb %v16,%v2,%v7,%v16
  261. .if \IsLast==1
  262. la \PTR_A_REG, DISP2(\Index ,N2)(\PTR_A_REG)
  263. .endif
  264. vfmadb %v20,%v2,%v1,%v20
  265. .if \IsLast==1
  266. la \PTR_B_REG, DISP2(\Index ,N2)(\PTR_B_REG)
  267. .endif
  268. .endm
  269. .macro Calculate_2x1_I PTR_A_REG,PTR_B_REG,Index,IsLast
  270. le %f3,DISP1(\Index ,0)(\PTR_B_REG)
  271. maeb %f1,%f3,DISP2(\Index ,0)(\PTR_A_REG)
  272. .if \IsLast==1
  273. la \PTR_B_REG, DISP1(\Index ,N1)(\PTR_B_REG)
  274. .endif
  275. maeb %f2, %f3,DISP2(\Index ,4)(\PTR_A_REG)
  276. .if \IsLast==1
  277. la \PTR_A_REG, DISP2(\Index ,N2)(\PTR_A_REG)
  278. .endif
  279. .endm
  280. .macro Calculate_1x1_I PTR_A_REG,PTR_B_REG,Index,IsLast
  281. le %f2,DISP1(\Index ,0)(\PTR_A_REG) /**a*/
  282. .if \IsLast==1
  283. la \PTR_A_REG,DISP1(\Index ,N1)(\PTR_A_REG)
  284. .endif
  285. maeb %f1,%f2,DISP1(\Index ,0)(\PTR_B_REG)
  286. .if \IsLast==1
  287. la \PTR_B_REG,DISP1(\Index ,N1)(\PTR_B_REG)
  288. .endif
  289. .endm
  290. .macro CALC_8x4 PTR_A_REG,PTR_B_REG
  291. Calculate_8x4_I \PTR_A_REG,\PTR_B_REG,0,1
  292. .endm
  293. .macro CALC_8x4_4 PTR_A_REG,PTR_B_REG
  294. Calculate_8x4_I \PTR_A_REG,\PTR_B_REG,0,0
  295. Calculate_8x4_I \PTR_A_REG,\PTR_B_REG,1,0
  296. Calculate_8x4_I \PTR_A_REG,\PTR_B_REG,2,0
  297. Calculate_8x4_I \PTR_A_REG,\PTR_B_REG,3,1
  298. .endm
  299. .macro CALC_8x2 PTR_A_REG,PTR_B_REG
  300. Calculate_8x2_I \PTR_A_REG,\PTR_B_REG,0,1
  301. .endm
  302. .macro CALC_8x2_4 PTR_A_REG,PTR_B_REG
  303. Calculate_8x2_I \PTR_A_REG,\PTR_B_REG,0,0
  304. Calculate_8x2_I \PTR_A_REG,\PTR_B_REG,1,0
  305. Calculate_8x2_I \PTR_A_REG,\PTR_B_REG,2,0
  306. Calculate_8x2_I \PTR_A_REG,\PTR_B_REG,3,1
  307. .endm
  308. .macro CALC_8x1 PTR_A_REG,PTR_B_REG
  309. Calculate_8x1_I \PTR_A_REG,\PTR_B_REG,0,1
  310. .endm
  311. .macro CALC_8x1_4 PTR_A_REG,PTR_B_REG
  312. Calculate_8x1_I \PTR_A_REG,\PTR_B_REG,0,0
  313. Calculate_8x1_I \PTR_A_REG,\PTR_B_REG,1,0
  314. Calculate_8x1_I \PTR_A_REG,\PTR_B_REG,2,0
  315. Calculate_8x1_I \PTR_A_REG,\PTR_B_REG,3,1
  316. .endm
  317. .macro CALC_4x4 PTR_A_REG,PTR_B_REG
  318. Calculate_4x4_I \PTR_A_REG,\PTR_B_REG,0,1
  319. .endm
  320. .macro CALC_4x4_4 PTR_A_REG,PTR_B_REG
  321. Calculate_4x4_I \PTR_A_REG,\PTR_B_REG,0,0
  322. Calculate_4x4_I \PTR_A_REG,\PTR_B_REG,1,0
  323. Calculate_4x4_I \PTR_A_REG,\PTR_B_REG,2,0
  324. Calculate_4x4_I \PTR_A_REG,\PTR_B_REG,3,1
  325. .endm
  326. .macro CALC_4x2 PTR_A_REG,PTR_B_REG
  327. Calculate_4x2_I \PTR_A_REG,\PTR_B_REG,0,1
  328. .endm
  329. .macro CALC_4x2_4 PTR_A_REG,PTR_B_REG
  330. Calculate_4x2_I \PTR_A_REG,\PTR_B_REG,0,0
  331. Calculate_4x2_I \PTR_A_REG,\PTR_B_REG,1,0
  332. Calculate_4x2_I \PTR_A_REG,\PTR_B_REG,2,0
  333. Calculate_4x2_I \PTR_A_REG,\PTR_B_REG,3,1
  334. .endm
  335. .macro CALC_4x1 PTR_A_REG,PTR_B_REG
  336. Calculate_4x1_I \PTR_A_REG,\PTR_B_REG,0,1
  337. .endm
  338. .macro CALC_4x1_4 PTR_A_REG,PTR_B_REG
  339. Calculate_4x1_I \PTR_A_REG,\PTR_B_REG,0,0
  340. Calculate_4x1_I \PTR_A_REG,\PTR_B_REG,1,0
  341. Calculate_4x1_I \PTR_A_REG,\PTR_B_REG,2,0
  342. Calculate_4x1_I \PTR_A_REG,\PTR_B_REG,3,1
  343. .endm
  344. .macro CALC_2x4 PTR_A_REG,PTR_B_REG
  345. Calculate_4x2_I \PTR_B_REG,\PTR_A_REG,0,1
  346. .endm
  347. .macro CALC_2x4_4 PTR_A_REG,PTR_B_REG
  348. Calculate_4x2_I \PTR_B_REG,\PTR_A_REG,0,0
  349. Calculate_4x2_I \PTR_B_REG,\PTR_A_REG,1,0
  350. Calculate_4x2_I \PTR_B_REG,\PTR_A_REG,2,0
  351. Calculate_4x2_I \PTR_B_REG,\PTR_A_REG,3,1
  352. .endm
  353. .macro CALC_2x2 PTR_A_REG,PTR_B_REG
  354. Calculate_2x2_I \PTR_A_REG,\PTR_B_REG,0,1
  355. .endm
  356. .macro CALC_2x2_4 PTR_A_REG,PTR_B_REG
  357. Calculate_2x2_I \PTR_A_REG,\PTR_B_REG,0,0
  358. Calculate_2x2_I \PTR_A_REG,\PTR_B_REG,1,0
  359. Calculate_2x2_I \PTR_A_REG,\PTR_B_REG,2,0
  360. Calculate_2x2_I \PTR_A_REG,\PTR_B_REG,3,1
  361. .endm
  362. .macro CALC_2x1 PTR_A_REG,PTR_B_REG
  363. Calculate_2x1_I \PTR_A_REG,\PTR_B_REG,0,1
  364. .endm
  365. .macro CALC_2x1_4 PTR_A_REG,PTR_B_REG
  366. Calculate_2x1_I \PTR_A_REG,\PTR_B_REG,0,0
  367. Calculate_2x1_I \PTR_A_REG,\PTR_B_REG,1,0
  368. Calculate_2x1_I \PTR_A_REG,\PTR_B_REG,2,0
  369. Calculate_2x1_I \PTR_A_REG,\PTR_B_REG,3,1
  370. .endm
  371. .macro CALC_1x4 PTR_A_REG,PTR_B_REG
  372. Calculate_4x1_I \PTR_B_REG,\PTR_A_REG,0,1
  373. .endm
  374. .macro CALC_1x4_4 PTR_A_REG,PTR_B_REG
  375. Calculate_4x1_I \PTR_B_REG,\PTR_A_REG,0,0
  376. Calculate_4x1_I \PTR_B_REG,\PTR_A_REG,1,0
  377. Calculate_4x1_I \PTR_B_REG,\PTR_A_REG,2,0
  378. Calculate_4x1_I \PTR_B_REG,\PTR_A_REG,3,1
  379. .endm
  380. .macro CALC_1x2 PTR_A_REG,PTR_B_REG
  381. Calculate_2x1_I \PTR_B_REG,\PTR_A_REG,0,1
  382. .endm
  383. .macro CALC_1x2_4 PTR_A_REG,PTR_B_REG
  384. Calculate_2x1_I \PTR_B_REG,\PTR_A_REG,0,0
  385. Calculate_2x1_I \PTR_B_REG,\PTR_A_REG,1,0
  386. Calculate_2x1_I \PTR_B_REG,\PTR_A_REG,2,0
  387. Calculate_2x1_I \PTR_B_REG,\PTR_A_REG,3,1
  388. .endm
  389. .macro CALC_1x1 PTR_A_REG,PTR_B_REG
  390. Calculate_1x1_I \PTR_A_REG,\PTR_B_REG,0,1
  391. .endm
  392. .macro CALC_1x1_4 PTR_A_REG,PTR_B_REG
  393. Calculate_1x1_I \PTR_A_REG,\PTR_B_REG,0,0
  394. Calculate_1x1_I \PTR_A_REG,\PTR_B_REG,1,0
  395. Calculate_1x1_I \PTR_A_REG,\PTR_B_REG,2,0
  396. Calculate_1x1_I \PTR_A_REG,\PTR_B_REG,3,1
  397. .endm
  398. /**************************************STORAGE*************************************************/
  399. .macro Multiply_8x1 vr1,vr2,vr3,vr4,va1,va2,va3,va4,vb1
  400. #if defined(TRMMKERNEL)
  401. vfmdb \vr1,\va1,\vb1
  402. vfmdb \vr2,\va2,\vb1
  403. vfmdb \vr3,\va3,\vb1
  404. vfmdb \vr4,\va4,\vb1
  405. #else
  406. vfmadb \vr1,\va1,\vb1,\vr1
  407. vfmadb \vr2,\va2,\vb1,\vr2
  408. vfmadb \vr3,\va3,\vb1,\vr3
  409. vfmadb \vr4,\va4,\vb1,\vr4
  410. #endif
  411. .endm
  412. .macro Multiply_4x1 vr1,vr2, va1,va2, vb1
  413. #if defined(TRMMKERNEL)
  414. vfmdb \vr1,\va1,\vb1
  415. vfmdb \vr2,\va2,\vb1
  416. #else
  417. vfmadb \vr1,\va1,\vb1,\vr1
  418. vfmadb \vr2,\va2,\vb1,\vr2
  419. #endif
  420. .endm
  421. .macro Multiply_2x1 vr1, va1,vb1
  422. #if defined(TRMMKERNEL)
  423. vfmdb \vr1,\va1,\vb1
  424. #else
  425. vfmadb \vr1,\va1,\vb1,\vr1
  426. #endif
  427. .endm
  428. .macro STORE_8x4 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL , LV1 ,LV2
  429. la \LV1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL)
  430. #if !defined(TRMMKERNEL)
  431. vl %v5, 0(\CIJ_REG)
  432. vl %v1 , 16(\CIJ_REG)
  433. vmrhf %v2,%v5,%v5
  434. vmrhf %v4,%v1,%v1
  435. vmrlf %v3,%v5,%v5
  436. vldeb %v2, %v2
  437. vldeb %v3, %v3
  438. vldeb %v4, %v4
  439. vmrlf %v5,%v1,%v1
  440. vldeb %v5, %v5
  441. #endif
  442. Multiply_8x1 %v2,%v3,%v4,%v5, %v16,%v17,%v18,%v19 ,\ALPHA_VECREG
  443. vledb %v2, %v2,0,0
  444. vledb %v3, %v3,0,0
  445. vledb %v4, %v4,0,0
  446. vledb %v5, %v5,0,0
  447. vstef %v2, 0(\CIJ_REG),0
  448. vstef %v2, 4(\CIJ_REG),2
  449. vstef %v3, 8(\CIJ_REG),0
  450. vstef %v3, 12(\CIJ_REG),2
  451. vstef %v4, 16(\CIJ_REG),0
  452. vstef %v4, 20(\CIJ_REG),2
  453. vstef %v5, 24(\CIJ_REG),0
  454. vstef %v5, 28(\CIJ_REG),2
  455. la \LV2,0(\LV1,\LDC_BYTE_ORIGINAL )
  456. #if !defined(TRMMKERNEL)
  457. vl %v16,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  458. vl %v17,16(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  459. vmrhf %v2,%v16,%v16
  460. vmrhf %v4,%v17,%v17
  461. vmrlf %v3,%v16,%v16
  462. vldeb %v2, %v2
  463. vldeb %v3, %v3
  464. vldeb %v4, %v4
  465. vmrlf %v5,%v17,%v17
  466. vldeb %v5, %v5
  467. #endif
  468. Multiply_8x1 %v2,%v3,%v4,%v5, %v20,%v21,%v22,%v23 ,\ALPHA_VECREG
  469. vledb %v2, %v2,0,0
  470. vledb %v3, %v3,0,0
  471. vledb %v4, %v4,0,0
  472. vledb %v5, %v5,0,0
  473. vstef %v2, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL),0
  474. vstef %v2, 4(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
  475. vstef %v3, 8(\CIJ_REG,\LDC_BYTE_ORIGINAL),0
  476. vstef %v3, 12(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
  477. vstef %v4, 16(\CIJ_REG,\LDC_BYTE_ORIGINAL),0
  478. vstef %v4, 20(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
  479. vstef %v5, 24(\CIJ_REG,\LDC_BYTE_ORIGINAL),0
  480. vstef %v5, 28(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
  481. #if !defined(TRMMKERNEL)
  482. vl %v17,0(\CIJ_REG,\LV1)
  483. vl %v18,16(\CIJ_REG,\LV1)
  484. vmrhf %v2,%v17,%v17
  485. vmrhf %v4,%v18,%v18
  486. vmrlf %v3,%v17,%v17
  487. vldeb %v2, %v2
  488. vldeb %v3, %v3
  489. vldeb %v4, %v4
  490. vmrlf %v5,%v18,%v18
  491. vldeb %v5, %v5
  492. #endif
  493. Multiply_8x1 %v2,%v3,%v4,%v5, %v24,%v25,%v26,%v27 ,\ALPHA_VECREG
  494. vledb %v2, %v2,0,0
  495. vledb %v3, %v3,0,0
  496. vledb %v4, %v4,0,0
  497. vledb %v5, %v5,0,0
  498. vstef %v2, 0(\CIJ_REG,\LV1),0
  499. vstef %v2, 4(\CIJ_REG,\LV1),2
  500. vstef %v3, 8(\CIJ_REG,\LV1),0
  501. vstef %v3, 12(\CIJ_REG,\LV1),2
  502. vstef %v4, 16(\CIJ_REG,\LV1),0
  503. vstef %v4, 20(\CIJ_REG,\LV1),2
  504. vstef %v5, 24(\CIJ_REG,\LV1),0
  505. vstef %v5, 28(\CIJ_REG,\LV1),2
  506. #if !defined(TRMMKERNEL)
  507. vl %v16,0(\CIJ_REG,\LV2)
  508. vl %v17,16(\CIJ_REG,\LV2)
  509. vmrhf %v2,%v16,%v16
  510. vmrhf %v4,%v17,%v17
  511. vmrlf %v3,%v16,%v16
  512. vldeb %v2, %v2
  513. vldeb %v3, %v3
  514. vldeb %v4, %v4
  515. vmrlf %v5,%v17,%v17
  516. vldeb %v5, %v5
  517. #endif
  518. Multiply_8x1 %v2,%v3,%v4,%v5, %v28,%v29,%v30,%v31 ,\ALPHA_VECREG
  519. vledb %v2, %v2,0,0
  520. vledb %v3, %v3,0,0
  521. vledb %v4, %v4,0,0
  522. vledb %v5, %v5,0,0
  523. vstef %v2, 0(\CIJ_REG,\LV2),0
  524. vstef %v2, 4(\CIJ_REG,\LV2),2
  525. vstef %v3, 8(\CIJ_REG,\LV2),0
  526. vstef %v3, 12(\CIJ_REG,\LV2),2
  527. vstef %v4, 16(\CIJ_REG,\LV2),0
  528. vstef %v4, 20(\CIJ_REG,\LV2),2
  529. vstef %v5, 24(\CIJ_REG,\LV2),0
  530. vstef %v5, 28(\CIJ_REG,\LV2),2
  531. la \CIJ_REG,N8(\CIJ_REG)
  532. .endm
  533. .macro STORE_8x2 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  534. #if !defined(TRMMKERNEL)
  535. vl %v5, 0(\CIJ_REG)
  536. vl %v1 , 16(\CIJ_REG)
  537. vmrhf %v2,%v5,%v5
  538. vmrhf %v4,%v1,%v1
  539. vmrlf %v3,%v5,%v5
  540. vldeb %v2, %v2
  541. vldeb %v3, %v3
  542. vldeb %v4, %v4
  543. vmrlf %v5,%v1,%v1
  544. vldeb %v5, %v5
  545. #endif
  546. Multiply_8x1 %v2,%v3,%v4,%v5, %v16,%v17,%v18,%v19 ,\ALPHA_VECREG
  547. vledb %v2, %v2,0,0
  548. vledb %v3, %v3,0,0
  549. vledb %v4, %v4,0,0
  550. vledb %v5, %v5,0,0
  551. vstef %v2, 0(\CIJ_REG),0
  552. vstef %v2, 4(\CIJ_REG),2
  553. vstef %v3, 8(\CIJ_REG),0
  554. vstef %v3, 12(\CIJ_REG),2
  555. vstef %v4, 16(\CIJ_REG),0
  556. vstef %v4, 20(\CIJ_REG),2
  557. vstef %v5, 24(\CIJ_REG),0
  558. vstef %v5, 28(\CIJ_REG),2
  559. #if !defined(TRMMKERNEL)
  560. vl %v16,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  561. vl %v17,16(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  562. vmrhf %v2,%v16,%v16
  563. vmrhf %v4,%v17,%v17
  564. vmrlf %v3,%v16,%v16
  565. vldeb %v2, %v2
  566. vldeb %v3, %v3
  567. vldeb %v4, %v4
  568. vmrlf %v5,%v17,%v17
  569. vldeb %v5, %v5
  570. #endif
  571. Multiply_8x1 %v2,%v3,%v4,%v5, %v20,%v21,%v22,%v23 ,\ALPHA_VECREG
  572. vledb %v2, %v2,0,0
  573. vledb %v3, %v3,0,0
  574. vledb %v4, %v4,0,0
  575. vledb %v5, %v5,0,0
  576. vstef %v2, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL),0
  577. vstef %v2, 4(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
  578. vstef %v3, 8(\CIJ_REG,\LDC_BYTE_ORIGINAL),0
  579. vstef %v3, 12(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
  580. vstef %v4, 16(\CIJ_REG,\LDC_BYTE_ORIGINAL),0
  581. vstef %v4, 20(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
  582. vstef %v5, 24(\CIJ_REG,\LDC_BYTE_ORIGINAL),0
  583. vstef %v5, 28(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
  584. la \CIJ_REG,N8(\CIJ_REG)
  585. .endm
  586. .macro STORE_8x1 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  587. #if !defined(TRMMKERNEL)
  588. vl %v5, 0(\CIJ_REG)
  589. vl %v1 , 16(\CIJ_REG)
  590. vmrhf %v2,%v5,%v5
  591. vmrhf %v4,%v1,%v1
  592. vmrlf %v3,%v5,%v5
  593. vldeb %v2, %v2
  594. vldeb %v3, %v3
  595. vldeb %v4, %v4
  596. vmrlf %v5,%v1,%v1
  597. vldeb %v5, %v5
  598. #endif
  599. Multiply_8x1 %v2,%v3,%v4,%v5, %v16,%v17,%v18,%v19 ,\ALPHA_VECREG
  600. vledb %v2, %v2,0,0
  601. vledb %v3, %v3,0,0
  602. vledb %v4, %v4,0,0
  603. vledb %v5, %v5,0,0
  604. vstef %v2, 0(\CIJ_REG),0
  605. vstef %v2, 4(\CIJ_REG),2
  606. vstef %v3, 8(\CIJ_REG),0
  607. vstef %v3, 12(\CIJ_REG),2
  608. vstef %v4, 16(\CIJ_REG),0
  609. vstef %v4, 20(\CIJ_REG),2
  610. vstef %v5, 24(\CIJ_REG),0
  611. vstef %v5, 28(\CIJ_REG),2
  612. la \CIJ_REG,N8(\CIJ_REG)
  613. .endm
  614. .macro STORE_4x4 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL, LV1 ,LV2
  615. la \LV1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL)
  616. #if !defined(TRMMKERNEL)
  617. vl %v5, 0(\CIJ_REG)
  618. vmrhf %v1,%v5,%v5
  619. vmrlf %v2,%v5,%v5
  620. vldeb %v1, %v1
  621. vldeb %v2, %v2
  622. #endif
  623. Multiply_4x1 %v1,%v2 , %v16,%v17 ,\ALPHA_VECREG
  624. vledb %v1, %v1,0,0
  625. vledb %v2, %v2,0,0
  626. vstef %v1, 0(\CIJ_REG),0
  627. vstef %v1, 4(\CIJ_REG),2
  628. vstef %v2, 8(\CIJ_REG),0
  629. vstef %v2, 12(\CIJ_REG),2
  630. la \LV2,0(\LV1,\LDC_BYTE_ORIGINAL )
  631. #if !defined(TRMMKERNEL)
  632. vl %v5, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL )
  633. vmrhf %v16,%v5,%v5
  634. vmrlf %v17,%v5,%v5
  635. vldeb %v16, %v16
  636. vldeb %v17, %v17
  637. #endif
  638. Multiply_4x1 %v16,%v17 , %v20,%v21 ,\ALPHA_VECREG
  639. vledb %v1, %v16,0,0
  640. vledb %v2, %v17,0,0
  641. vstef %v1, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL ),0
  642. vstef %v1, 4(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2
  643. vstef %v2, 8(\CIJ_REG,\LDC_BYTE_ORIGINAL ),0
  644. vstef %v2, 12(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2
  645. #if !defined(TRMMKERNEL)
  646. vl %v5, 0(\CIJ_REG,\LV1 )
  647. vmrhf %v16,%v5,%v5
  648. vmrlf %v17,%v5,%v5
  649. vldeb %v16, %v16
  650. vldeb %v17, %v17
  651. #endif
  652. Multiply_4x1 %v16,%v17 , %v24,%v25 ,\ALPHA_VECREG
  653. vledb %v1, %v16,0,0
  654. vledb %v2, %v17,0,0
  655. vstef %v1, 0(\CIJ_REG,\LV1 ),0
  656. vstef %v1, 4(\CIJ_REG,\LV1 ),2
  657. vstef %v2, 8(\CIJ_REG,\LV1 ),0
  658. vstef %v2, 12(\CIJ_REG,\LV1 ),2
  659. #if !defined(TRMMKERNEL)
  660. vl %v5, 0(\CIJ_REG,\LV2 )
  661. vmrhf %v16,%v5,%v5
  662. vmrlf %v17,%v5,%v5
  663. vldeb %v16, %v16
  664. vldeb %v17, %v17
  665. #endif
  666. Multiply_4x1 %v16,%v17, %v28,%v29 ,\ALPHA_VECREG
  667. vledb %v1, %v16,0,0
  668. vledb %v2, %v17,0,0
  669. vstef %v1, 0(\CIJ_REG,\LV2 ),0
  670. vstef %v1, 4(\CIJ_REG,\LV2 ),2
  671. vstef %v2, 8(\CIJ_REG,\LV2 ),0
  672. vstef %v2, 12(\CIJ_REG,\LV2 ),2
  673. la \CIJ_REG,N4(\CIJ_REG)
  674. .endm
  675. .macro STORE_4x2 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  676. #if !defined(TRMMKERNEL)
  677. vl %v5, 0(\CIJ_REG)
  678. vmrhf %v1,%v5,%v5
  679. vmrlf %v2,%v5,%v5
  680. vldeb %v1, %v1
  681. vldeb %v2, %v2
  682. #endif
  683. Multiply_4x1 %v1,%v2 , %v16,%v17 ,\ALPHA_VECREG
  684. vledb %v1, %v1,0,0
  685. vledb %v2, %v2,0,0
  686. vstef %v1, 0(\CIJ_REG),0
  687. vstef %v1, 4(\CIJ_REG),2
  688. vstef %v2, 8(\CIJ_REG),0
  689. vstef %v2, 12(\CIJ_REG),2
  690. #if !defined(TRMMKERNEL)
  691. vl %v5, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL )
  692. vmrhf %v16,%v5,%v5
  693. vmrlf %v17,%v5,%v5
  694. vldeb %v16, %v16
  695. vldeb %v17, %v17
  696. #endif
  697. Multiply_4x1 %v16,%v17 , %v20,%v21 ,\ALPHA_VECREG
  698. vledb %v1, %v16,0,0
  699. vledb %v2, %v17,0,0
  700. vstef %v1, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL ),0
  701. vstef %v1, 4(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2
  702. vstef %v2, 8(\CIJ_REG,\LDC_BYTE_ORIGINAL ),0
  703. vstef %v2, 12(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2
  704. la \CIJ_REG,N4(\CIJ_REG)
  705. .endm
  706. .macro STORE_4x1 ALPHA_FLOAT,CIJ_REG , LDC_BYTE_ORIGINAL
  707. ledbr %f7,\ALPHA_FLOAT
  708. #if defined(TRMMKERNEL)
  709. meebr %f1,%f7
  710. meebr %f2,%f7
  711. meebr %f3,%f7
  712. meebr %f4,%f7
  713. ste %f1,0(\CIJ_REG)
  714. ste %f2,4(\CIJ_REG )
  715. ste %f3,8(\CIJ_REG )
  716. ste %f4,12(\CIJ_REG)
  717. #else
  718. le %f5,0(\CIJ_REG)
  719. maebr %f5,%f1,%f7
  720. ste %f5,0(\CIJ_REG)
  721. le %f6,4(\CIJ_REG )
  722. maebr %f6,%f2,%f7
  723. ste %f6,4(\CIJ_REG )
  724. le %f5,8(\CIJ_REG)
  725. maebr %f5,%f3,%f7
  726. ste %f5,8(\CIJ_REG)
  727. le %f6,12(\CIJ_REG)
  728. maebr %f6,%f4,%f7
  729. ste %f6,12(\CIJ_REG)
  730. #endif
  731. la \CIJ_REG,N4(\CIJ_REG)
  732. .endm
  733. .macro STORE_2x2 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
  734. #if !defined(TRMMKERNEL)
  735. vlef %v1,0(\CIJ_REG) ,0
  736. vlef %v1,4(\CIJ_REG) ,2
  737. vldeb %v1,%v1
  738. #endif
  739. Multiply_2x1 %v1, %v16,\ALPHA_VECREG
  740. vledb %v1, %v1,0,0
  741. vstef %v1, 0(\CIJ_REG),0
  742. vstef %v1, 4(\CIJ_REG),2
  743. #if !defined(TRMMKERNEL)
  744. vlef %v16,0(\CIJ_REG,\LDC_BYTE_ORIGINAL ) ,0
  745. vlef %v16,4(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2
  746. vldeb %v16,%v16
  747. #endif
  748. Multiply_2x1 %v16, %v20,\ALPHA_VECREG
  749. vledb %v1, %v16,0,0
  750. vstef %v1, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL ),0
  751. vstef %v1, 4(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2
  752. la \CIJ_REG,N2(\CIJ_REG)
  753. .endm
  754. .macro STORE_2x1 ALPHA_FLOAT,CIJ_REG , LDC_BYTE_ORIGINAL
  755. ledbr %f3,\ALPHA_FLOAT
  756. #if defined(TRMMKERNEL)
  757. meebr %f1,%f3
  758. meebr %f2,%f3
  759. ste %f1,0(\CIJ_REG)
  760. ste %f2,4(\CIJ_REG)
  761. #else
  762. le %f4,0(\CIJ_REG)
  763. le %f5,4(\CIJ_REG)
  764. maebr %f4,%f1,%f3
  765. maebr %f5,%f2,%f3
  766. ste %f4,0(\CIJ_REG)
  767. ste %f5,4(\CIJ_REG)
  768. #endif
  769. la \CIJ_REG,N2(\CIJ_REG)
  770. .endm
  771. /*STORE C1X1*/
  772. .macro STORE_1x1 ALPHA_FLOAT,CIJ_REG,LDC_BYTE_ORIGINAL
  773. ledbr %f3,\ALPHA_FLOAT
  774. #if defined(TRMMKERNEL)
  775. meebr %f1,%f3
  776. ste %f1,0(\CIJ_REG)
  777. #else
  778. le %f2,0(\CIJ_REG)
  779. maebr %f2,%f1,%f3
  780. ste %f2,0(\CIJ_REG)
  781. #endif
  782. la \CIJ_REG,N1(\CIJ_REG)
  783. .endm
  784. /*reversed ones*/
  785. .macro STORE_2x4 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL , LV1 ,LV2
  786. #if !defined(TRMMKERNEL)
  787. vlef %v1,0(\CIJ_REG) ,0
  788. vlef %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL) ,2
  789. vldeb %v1,%v1
  790. #endif
  791. la \LV1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL)
  792. Multiply_2x1 %v1, %v16 ,\ALPHA_VECREG
  793. la \LV2,0(\LV1,\LDC_BYTE_ORIGINAL )
  794. vledb %v1, %v1,0,0
  795. vstef %v1, 0(\CIJ_REG),0
  796. vstef %v1, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
  797. #if !defined(TRMMKERNEL)
  798. vlef %v16,0(\CIJ_REG,\LV1 ) ,0
  799. vlef %v16,0(\CIJ_REG,\LV2 ),2
  800. vldeb %v16,%v16
  801. #endif
  802. Multiply_2x1 %v16, %v17,\ALPHA_VECREG
  803. vledb %v1, %v16,0,0
  804. vstef %v1, 0(\CIJ_REG ,\LV1 ),0
  805. vstef %v1, 0(\CIJ_REG,\LV2 ),2
  806. /*2nd*/
  807. #if !defined(TRMMKERNEL)
  808. vlef %v1,4(\CIJ_REG) ,0
  809. vlef %v1,4(\CIJ_REG,\LDC_BYTE_ORIGINAL) ,2
  810. vldeb %v1,%v1
  811. #endif
  812. Multiply_2x1 %v1, %v20 ,\ALPHA_VECREG
  813. vledb %v1, %v1,0,0
  814. vstef %v1, 4(\CIJ_REG),0
  815. vstef %v1,4(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
  816. #if !defined(TRMMKERNEL)
  817. vlef %v16,4(\CIJ_REG,\LV1 ) ,0
  818. vlef %v16,4(\CIJ_REG,\LV2 ),2
  819. vldeb %v16,%v16
  820. #endif
  821. Multiply_2x1 %v16, %v21,\ALPHA_VECREG
  822. vledb %v1, %v16,0,0
  823. vstef %v1, 4(\CIJ_REG ,\LV1 ),0
  824. vstef %v1, 4(\CIJ_REG,\LV2 ),2
  825. la \CIJ_REG,N2(\CIJ_REG)
  826. .endm
  827. .macro STORE_1x4 ALPHA_FLOAT,CIJ_REG , LDC_BYTE_ORIGINAL , LV1 ,LV2
  828. la \LV1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL)
  829. ledbr %f7,\ALPHA_FLOAT
  830. la \LV2,0(\LV1,\LDC_BYTE_ORIGINAL )
  831. #if defined(TRMMKERNEL)
  832. meebr %f1,%f7
  833. meebr %f2,%f7
  834. meebr %f3,%f7
  835. meebr %f4,%f7
  836. ste %f1,0(\CIJ_REG)
  837. ste %f2,0(\CIJ_REG, \LDC_BYTE_ORIGINAL)
  838. ste %f3,0(\CIJ_REG, \LV1)
  839. ste %f4,0(\CIJ_REG, \LV2)
  840. #else
  841. le %f5,0(\CIJ_REG)
  842. maebr %f5,%f1,%f7
  843. ste %f5,0(\CIJ_REG)
  844. le %f6,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  845. maebr %f6,%f2,%f7
  846. ste %f6,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  847. le %f5,0(\CIJ_REG, \LV1)
  848. maebr %f5,%f3,%f7
  849. ste %f5,0(\CIJ_REG, \LV1)
  850. le %f6,0(\CIJ_REG, \LV2)
  851. maebr %f6,%f4,%f7
  852. ste %f6,0(\CIJ_REG, \LV2)
  853. #endif
  854. la \CIJ_REG,N1(\CIJ_REG)
  855. .endm
  856. .macro STORE_1x2 ALPHA_FLOAT,CIJ_REG , LDC_BYTE_ORIGINAL
  857. ledbr %f3,\ALPHA_FLOAT
  858. #if defined(TRMMKERNEL)
  859. meebr %f1,%f3
  860. meebr %f2,%f3
  861. ste %f1,0(\CIJ_REG)
  862. ste %f2,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  863. #else
  864. le %f4,0(\CIJ_REG)
  865. maebr %f4,%f1,%f3
  866. ste %f4,0(\CIJ_REG)
  867. le %f5,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  868. maebr %f5,%f2,%f3
  869. ste %f5,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
  870. #endif
  871. la \CIJ_REG,N1(\CIJ_REG)
  872. .endm
  873. /****************************TRMM POINTER REFRESH MACROSES*************************/
  874. .macro RefreshPointers PTR_A,PTR_B,OFF_VAL,B_VAL,C_A,C_B
  875. #if (defined(LEFT) && defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA))
  876. /* ptrbb = bb;*/
  877. lgr \PTR_B,\B_VAL /*refresh BPOINT*/
  878. #else
  879. /* ptrba =ptrba+ off*C_A;
  880. ptrbb = bb + off*C_B;*/
  881. .if \C_B==4
  882. .if \C_A==8
  883. sllg \PTR_B, \OFF_VAL,4
  884. la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*4*/
  885. agr \PTR_A,\PTR_B /*ptrba+off*4**/
  886. la \PTR_B,0(\B_VAL,\PTR_B)
  887. .elseif \C_A==4
  888. sllg \PTR_B, \OFF_VAL,4
  889. agr \PTR_A,\PTR_B /*ptrba+off*4**/
  890. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  891. .elseif \C_A==2
  892. sllg \PTR_B, \OFF_VAL,3
  893. la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*2**/
  894. agr \PTR_B, \PTR_B
  895. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  896. .elseif \C_A==1
  897. sllg \PTR_B, \OFF_VAL,2
  898. agr \PTR_A,\PTR_B /*ptrba+off*4**/
  899. sllg \PTR_B, \OFF_VAL,4
  900. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  901. .endif
  902. .elseif \C_B==2
  903. .if \C_A==8
  904. sllg \PTR_B, \OFF_VAL,5
  905. agr \PTR_A,\PTR_B /*ptrba+off*8**/
  906. sllg \PTR_B, \OFF_VAL,3
  907. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  908. .elseif \C_A==4
  909. sllg \PTR_B, \OFF_VAL,3
  910. la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*2**/
  911. agr \PTR_A,\PTR_B /*ptrba+off*2**/
  912. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  913. .elseif \C_A==2
  914. sllg \PTR_B, \OFF_VAL,3
  915. agr \PTR_A,\PTR_B /*ptrba+off*2**/
  916. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  917. .elseif \C_A==1
  918. sllg \PTR_B, \OFF_VAL,2
  919. la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*1**/
  920. agr \PTR_B,\PTR_B /* off+off**/
  921. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  922. .endif
  923. .elseif \C_B==1
  924. .if \C_A==8
  925. sllg \PTR_B, \OFF_VAL,5
  926. agr \PTR_A,\PTR_B /*ptrba+off*8**/
  927. sllg \PTR_B, \OFF_VAL,2
  928. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  929. .elseif \C_A==4
  930. sllg \PTR_B, \OFF_VAL,4
  931. agr \PTR_A,\PTR_B /*ptrba+off*4**/
  932. sllg \PTR_B, \OFF_VAL,2
  933. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  934. .elseif \C_A==2
  935. sllg \PTR_B, \OFF_VAL,2
  936. la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*1**/
  937. agr \PTR_A,\PTR_B /*ptrba+off*1**/
  938. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  939. .elseif \C_A==1
  940. sllg \PTR_B, \OFF_VAL,2
  941. agr \PTR_A,\PTR_B /*ptrba+off*1**/
  942. la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/
  943. .endif
  944. .endif
  945. #endif
  946. .endm
  947. /**/
  948. .macro RefreshTempBk TEMP_VAL,BK_VAL,OFF_VAL,INCR_A,INCR_B
  949. #if (defined(LEFT) && !defined(TRANSA)) || (!defined(LEFT) && defined(TRANSA))
  950. /* temp = bk-off;*/
  951. sgrk \TEMP_VAL,\BK_VAL,\OFF_VAL
  952. #elif defined(LEFT)
  953. /* temp = off+INCR_A; // number of values in A */
  954. la \TEMP_VAL,\INCR_A(\OFF_VAL)
  955. #else
  956. /* temp = off+INCR_B // number of values in B*/
  957. la \TEMP_VAL,\INCR_B(\OFF_VAL)
  958. #endif
  959. .endm
  960. .macro RefreshPointersAndOFF TEMP_VAL,BK_VAL,OFF_VAL,PTR_B,PTR_A,C_A,C_B
  961. #if ( defined(LEFT) && defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA))
  962. /*temp = bk - off;*/
  963. sgrk \TEMP_VAL,\BK_VAL,\OFF_VAL
  964. #ifdef LEFT
  965. /*temp -= 8; // number of values in A*/
  966. lay \TEMP_VAL,-\C_A(\TEMP_VAL)
  967. #else
  968. /*temp -= 4; // number of values in B*/
  969. lay \TEMP_VAL,-\C_B(\TEMP_VAL)
  970. #endif
  971. /*ptrba += temp*C_A;
  972. ptrbb += temp*C_B;*/
  973. .if \C_A==8
  974. sllg \TEMP_VAL, \TEMP_VAL,5
  975. .elseif \C_A==4
  976. sllg \TEMP_VAL, \TEMP_VAL,4 /*temp*4*/
  977. .elseif \C_A==2
  978. sllg \TEMP_VAL, \TEMP_VAL,3 /*temp*2*/
  979. .elseif \C_A==1
  980. sllg \TEMP_VAL, \TEMP_VAL,2 /*temp*1*/
  981. .endif
  982. la \PTR_A,0(\PTR_A,\TEMP_VAL) /*ptrba+temp*C_A*/
  983. /*we do not need to refresh ptrbb. so lets ignore it*/
  984. #endif
  985. #ifdef LEFT
  986. /*off += 8; // number of values in A*/
  987. aghi \OFF_VAL,\C_A
  988. #endif
  989. .endm