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

xform.S 34KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392
  1. /* TODO
  2. *
  3. * 1) It would be nice if load/store double could be used
  4. * at least for the matrix parts. I think for the matrices
  5. * it is safe, but for the vertices it probably is not due to
  6. * things like glInterleavedArrays etc.
  7. *
  8. * UPDATE: Trying this now in sparc_matrix.h -DaveM_990624
  9. *
  10. * 2) One extremely slick trick would be if we could enclose
  11. * groups of xform calls on the same vertices such that
  12. * we just load the matrix into f16-->f31 before the calls
  13. * and then we would not have to do them here. This may be
  14. * tricky and not much of a gain though.
  15. */
  16. #include "sparc_matrix.h"
  17. #if defined(SVR4) || defined(__SVR4) || defined(__svr4__) || defined(__arch64__)
  18. /* Solaris requires this for 64-bit. */
  19. .register %g2, #scratch
  20. .register %g3, #scratch
  21. #endif
  22. .text
  23. .align 64
  24. __set_v4f_1:
  25. ld [%o0 + V4F_FLAGS], %g2
  26. mov 1, %g1
  27. st %g1, [%o0 + V4F_SIZE]
  28. or %g2, VEC_SIZE_1, %g2
  29. retl
  30. st %g2, [%o0 + V4F_FLAGS]
  31. __set_v4f_2:
  32. ld [%o0 + V4F_FLAGS], %g2
  33. mov 2, %g1
  34. st %g1, [%o0 + V4F_SIZE]
  35. or %g2, VEC_SIZE_2, %g2
  36. retl
  37. st %g2, [%o0 + V4F_FLAGS]
  38. __set_v4f_3:
  39. ld [%o0 + V4F_FLAGS], %g2
  40. mov 3, %g1
  41. st %g1, [%o0 + V4F_SIZE]
  42. or %g2, VEC_SIZE_3, %g2
  43. retl
  44. st %g2, [%o0 + V4F_FLAGS]
  45. __set_v4f_4:
  46. ld [%o0 + V4F_FLAGS], %g2
  47. mov 4, %g1
  48. st %g1, [%o0 + V4F_SIZE]
  49. or %g2, VEC_SIZE_4, %g2
  50. retl
  51. st %g2, [%o0 + V4F_FLAGS]
  52. /* First the raw versions. */
  53. .globl _mesa_sparc_transform_points1_general
  54. _mesa_sparc_transform_points1_general:
  55. ld [%o2 + V4F_STRIDE], %o5
  56. LDPTR [%o2 + V4F_START], %g1
  57. LDPTR [%o0 + V4F_START], %g2
  58. ld [%o2 + V4F_COUNT], %g3
  59. LDMATRIX_0_1_2_3_12_13_14_15(%o1)
  60. cmp %g3, 1
  61. st %g3, [%o0 + V4F_COUNT]
  62. bl 3f
  63. clr %o1
  64. be 2f
  65. andn %g3, 1, %o2
  66. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  67. add %g1, %o5, %g1 ! IEU0
  68. ld [%g1 + 0x00], %f8 ! LSU Group
  69. add %o1, 2, %o1 ! IEU0
  70. add %g1, %o5, %g1 ! IEU1
  71. fmuls %f0, M0, %f1 ! FGM Group 1-cycle stall on %f0
  72. fmuls %f0, M1, %f2 ! FGM Group
  73. fmuls %f0, M2, %f3 ! FGM Group
  74. fmuls %f0, M3, %f4 ! FGM Group
  75. fmuls %f8, M0, %f9 ! FGM Group f1 available
  76. fadds %f1, M12, %f1 ! FGA
  77. st %f1, [%g2 + 0x00] ! LSU
  78. fmuls %f8, M1, %f10 ! FGM Group f2 available
  79. fadds %f2, M13, %f2 ! FGA
  80. st %f2, [%g2 + 0x04] ! LSU
  81. fmuls %f8, M2, %f11 ! FGM Group f3 available
  82. fadds %f3, M14, %f3 ! FGA
  83. st %f3, [%g2 + 0x08] ! LSU
  84. fmuls %f8, M3, %f12 ! FGM Group f4 available
  85. fadds %f4, M15, %f4 ! FGA
  86. st %f4, [%g2 + 0x0c] ! LSU
  87. fadds %f9, M12, %f9 ! FGA Group f9 available
  88. st %f9, [%g2 + 0x10] ! LSU
  89. fadds %f10, M13, %f10 ! FGA Group f10 available
  90. st %f10, [%g2 + 0x14] ! LSU
  91. fadds %f11, M14, %f11 ! FGA Group f11 available
  92. st %f11, [%g2 + 0x18] ! LSU
  93. fadds %f12, M15, %f12 ! FGA Group f12 available
  94. st %f12, [%g2 + 0x1c] ! LSU
  95. cmp %o1, %o2 ! IEU1
  96. bne 1b ! CTI
  97. add %g2, 0x20, %g2 ! IEU0 Group
  98. cmp %o1, %g3
  99. be 3f
  100. nop
  101. 2: ld [%g1 + 0x00], %f0 ! LSU Group
  102. fmuls %f0, M0, %f1 ! FGM Group 1-cycle stall on %f0
  103. fmuls %f0, M1, %f2 ! FGM Group
  104. fmuls %f0, M2, %f3 ! FGM Group
  105. fmuls %f0, M3, %f4 ! FGM Group
  106. fadds %f1, M12, %f1 ! FGA Group
  107. st %f1, [%g2 + 0x00] ! LSU
  108. fadds %f2, M13, %f2 ! FGA Group
  109. st %f2, [%g2 + 0x04] ! LSU
  110. fadds %f3, M14, %f3 ! FGA Group
  111. st %f3, [%g2 + 0x08] ! LSU
  112. fadds %f4, M15, %f4 ! FGA Group
  113. st %f4, [%g2 + 0x0c] ! LSU
  114. 3:
  115. ba __set_v4f_4
  116. nop
  117. .globl _mesa_sparc_transform_points1_identity
  118. _mesa_sparc_transform_points1_identity:
  119. cmp %o0, %o2
  120. be 4f
  121. ld [%o2 + V4F_STRIDE], %o5
  122. LDPTR [%o2 + V4F_START], %g1
  123. LDPTR [%o0 + V4F_START], %g2
  124. ld [%o2 + V4F_COUNT], %g3
  125. cmp %g3, 1
  126. st %g3, [%o0 + V4F_COUNT]
  127. bl 3f
  128. clr %o1
  129. be 2f
  130. andn %g3, 1, %o2
  131. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  132. add %g1, %o5, %g1 ! IEU0
  133. ld [%g1 + 0x00], %f1 ! LSU Group
  134. add %o1, 2, %o1 ! IEU0
  135. add %g1, %o5, %g1 ! IEU1
  136. st %f0, [%g2 + 0x00] ! LSU Group
  137. cmp %o1, %o2 ! IEU1
  138. st %f1, [%g2 + 0x10] ! LSU Group
  139. bne 1b ! CTI
  140. add %g2, 0x20, %g2 ! IEU0
  141. cmp %o1, %g3
  142. be 3f
  143. nop
  144. 2: ld [%g1 + 0x00], %f0
  145. addx %g0, %g0, %g0
  146. st %f0, [%g2 + 0x00]
  147. 3:
  148. ba __set_v4f_1
  149. nop
  150. 4: retl
  151. nop
  152. .globl _mesa_sparc_transform_points1_2d
  153. _mesa_sparc_transform_points1_2d:
  154. ld [%o2 + V4F_STRIDE], %o5
  155. LDPTR [%o2 + V4F_START], %g1
  156. LDPTR [%o0 + V4F_START], %g2
  157. ld [%o2 + V4F_COUNT], %g3
  158. LDMATRIX_0_1_12_13(%o1)
  159. cmp %g3, 1
  160. st %g3, [%o0 + V4F_COUNT]
  161. bl 3f
  162. clr %o1
  163. be 2f
  164. andn %g3, 1, %o2
  165. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  166. add %g1, %o5, %g1 ! IEU0
  167. ld [%g1 + 0x00], %f8 ! LSU Group
  168. add %o1, 2, %o1 ! IEU0
  169. add %g1, %o5, %g1 ! IEU1
  170. fmuls %f0, M0, %f1 ! FGM Group
  171. fmuls %f0, M1, %f2 ! FGM Group
  172. fmuls %f8, M0, %f9 ! FGM Group
  173. fmuls %f8, M1, %f10 ! FGM Group
  174. fadds %f1, M12, %f3 ! FGA Group f1 available
  175. st %f3, [%g2 + 0x00] ! LSU
  176. fadds %f2, M13, %f4 ! FGA Group f2 available
  177. st %f4, [%g2 + 0x04] ! LSU
  178. fadds %f9, M12, %f11 ! FGA Group f9 available
  179. st %f11, [%g2 + 0x10] ! LSU
  180. fadds %f10, M13, %f12 ! FGA Group f10 available
  181. st %f12, [%g2 + 0x14] ! LSU
  182. cmp %o1, %o2 ! IEU1
  183. bne 1b ! CTI
  184. add %g2, 0x20, %g2 ! IEU0 Group
  185. cmp %o1, %g3
  186. be 3f
  187. nop
  188. 2: ld [%g1 + 0x00], %f0
  189. fmuls %f0, M0, %f1
  190. fmuls %f0, M1, %f2
  191. fadds %f1, M12, %f3
  192. st %f3, [%g2 + 0x00]
  193. fadds %f2, M13, %f4
  194. st %f4, [%g2 + 0x04]
  195. 3:
  196. ba __set_v4f_2
  197. nop
  198. .globl _mesa_sparc_transform_points1_2d_no_rot
  199. _mesa_sparc_transform_points1_2d_no_rot:
  200. ld [%o2 + V4F_STRIDE], %o5
  201. LDPTR [%o2 + V4F_START], %g1
  202. LDPTR [%o0 + V4F_START], %g2
  203. ld [%o2 + V4F_COUNT], %g3
  204. LDMATRIX_0_12_13(%o1)
  205. cmp %g3, 1
  206. st %g3, [%o0 + V4F_COUNT]
  207. bl 3f
  208. clr %o1
  209. be 2f
  210. andn %g3, 1, %o2
  211. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  212. add %g1, %o5, %g1 ! IEU0
  213. ld [%g1 + 0x00], %f4 ! LSU Group
  214. add %o1, 2, %o1 ! IEU0
  215. add %g1, %o5, %g1 ! IEU1
  216. fmuls %f0, M0, %f1 ! FGM Group
  217. fmuls %f4, M0, %f5 ! FGM Group
  218. fadds %f1, M12, %f3 ! FGA Group, 2 cycle stall, f1 available
  219. st %f3, [%g2 + 0x00] ! LSU
  220. st M13, [%g2 + 0x04] ! LSU Group, f5 available
  221. fadds %f5, M12, %f6 ! FGA
  222. st %f6, [%g2 + 0x10] ! LSU Group
  223. st M13, [%g2 + 0x14] ! LSU Group
  224. cmp %o1, %o2 ! IEU1
  225. bne 1b ! CTI
  226. add %g2, 0x20, %g2 ! IEU0 Group
  227. cmp %o1, %g3
  228. be 3f
  229. nop
  230. 2: ld [%g1 + 0x00], %f0
  231. fmuls %f0, M0, %f1
  232. fadds %f1, M12, %f3
  233. st %f3, [%g2 + 0x00]
  234. st M13, [%g2 + 0x04]
  235. 3:
  236. ba __set_v4f_2
  237. nop
  238. .globl _mesa_sparc_transform_points1_3d
  239. _mesa_sparc_transform_points1_3d:
  240. ld [%o2 + V4F_STRIDE], %o5
  241. LDPTR [%o2 + V4F_START], %g1
  242. LDPTR [%o0 + V4F_START], %g2
  243. ld [%o2 + V4F_COUNT], %g3
  244. LDMATRIX_0_1_2_12_13_14(%o1)
  245. cmp %g3, 1
  246. st %g3, [%o0 + V4F_COUNT]
  247. bl 3f
  248. clr %o1
  249. be 2f
  250. andn %g3, 1, %o2
  251. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  252. add %g1, %o5, %g1 ! IEU0
  253. ld [%g1 + 0x00], %f4 ! LSU Group
  254. add %o1, 2, %o1 ! IEU0
  255. add %g1, %o5, %g1 ! IEU1
  256. fmuls %f0, M0, %f1 ! FGM Group
  257. fmuls %f0, M1, %f2 ! FGM Group
  258. fmuls %f0, M2, %f3 ! FGM Group
  259. fmuls %f4, M0, %f5 ! FGM Group
  260. fadds %f1, M12, %f1 ! FGA Group, f1 available
  261. st %f1, [%g2 + 0x00] ! LSU
  262. fmuls %f4, M1, %f6 ! FGM
  263. fadds %f2, M13, %f2 ! FGA Group, f2 available
  264. st %f2, [%g2 + 0x04] ! LSU
  265. fmuls %f4, M2, %f7 ! FGM
  266. fadds %f3, M14, %f3 ! FGA Group, f3 available
  267. st %f3, [%g2 + 0x08] ! LSU
  268. fadds %f5, M12, %f5 ! FGA Group, f5 available
  269. st %f5, [%g2 + 0x10] ! LSU
  270. fadds %f6, M13, %f6 ! FGA Group, f6 available
  271. st %f6, [%g2 + 0x14] ! LSU
  272. fadds %f7, M14, %f7 ! FGA Group, f7 available
  273. st %f7, [%g2 + 0x18] ! LSU
  274. cmp %o1, %o2 ! IEU1
  275. bne 1b ! CTI
  276. add %g2, 0x20, %g2 ! IEU0 Group
  277. cmp %o1, %g3
  278. be 3f
  279. nop
  280. 2: ld [%g1 + 0x00], %f0
  281. fmuls %f0, M0, %f1
  282. fmuls %f0, M1, %f2
  283. fmuls %f0, M2, %f3
  284. fadds %f1, M12, %f1
  285. st %f1, [%g2 + 0x00]
  286. fadds %f2, M13, %f2
  287. st %f2, [%g2 + 0x04]
  288. fadds %f3, M14, %f3
  289. st %f3, [%g2 + 0x08]
  290. 3:
  291. ba __set_v4f_3
  292. nop
  293. .globl _mesa_sparc_transform_points1_3d_no_rot
  294. _mesa_sparc_transform_points1_3d_no_rot:
  295. ld [%o2 + V4F_STRIDE], %o5
  296. LDPTR [%o2 + V4F_START], %g1
  297. LDPTR [%o0 + V4F_START], %g2
  298. ld [%o2 + V4F_COUNT], %g3
  299. LDMATRIX_0_12_13_14(%o1)
  300. cmp %g3, 1
  301. st %g3, [%o0 + V4F_COUNT]
  302. bl 3f
  303. clr %o1
  304. be 2f
  305. andn %g3, 1, %o2
  306. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  307. add %g1, %o5, %g1 ! IEU0
  308. ld [%g1 + 0x00], %f2 ! LSU Group
  309. add %o1, 2, %o1 ! IEU0
  310. add %g1, %o5, %g1 ! IEU1
  311. fmuls %f0, M0, %f1 ! FGM Group
  312. fmuls %f2, M0, %f3 ! FGM Group
  313. fadds %f1, M12, %f1 ! FGA Group, 2 cycle stall, f1 available
  314. st %f1, [%g2 + 0x00] ! LSU
  315. fadds %f3, M12, %f3 ! FGA Group, f3 available
  316. st M13, [%g2 + 0x04] ! LSU
  317. st M14, [%g2 + 0x08] ! LSU Group
  318. st %f3, [%g2 + 0x10] ! LSU Group
  319. st M13, [%g2 + 0x14] ! LSU Group
  320. st M14, [%g2 + 0x18] ! LSU Group
  321. cmp %o1, %o2 ! IEU1
  322. bne 1b ! CTI
  323. add %g2, 0x20, %g2 ! IEU0 Group
  324. cmp %o1, %g3
  325. be 3f
  326. nop
  327. 2: ld [%g1 + 0x00], %f0
  328. fmuls %f0, M0, %f1
  329. fadds %f1, M12, %f1
  330. st %f1, [%g2 + 0x00]
  331. st M13, [%g2 + 0x04]
  332. st M14, [%g2 + 0x08]
  333. 3:
  334. ba __set_v4f_3
  335. nop
  336. .globl _mesa_sparc_transform_points1_perspective
  337. _mesa_sparc_transform_points1_perspective:
  338. ld [%o2 + V4F_STRIDE], %o5
  339. LDPTR [%o2 + V4F_START], %g1
  340. LDPTR [%o0 + V4F_START], %g2
  341. ld [%o2 + V4F_COUNT], %g3
  342. LDMATRIX_0_14(%o1)
  343. cmp %g3, 1
  344. st %g3, [%o0 + V4F_COUNT]
  345. bl 3f
  346. clr %o1
  347. be 2f
  348. andn %g3, 1, %o2
  349. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  350. add %g1, %o5, %g1 ! IEU0
  351. ld [%g1 + 0x00], %f2 ! LSU Group
  352. add %o1, 2, %o1 ! IEU0
  353. add %g1, %o5, %g1 ! IEU1
  354. fmuls %f0, M0, %f1 ! FGM Group
  355. st %f1, [%g2 + 0x00] ! LSU
  356. fmuls %f2, M0, %f3 ! FGM Group
  357. st %g0, [%g2 + 0x04] ! LSU
  358. st M14, [%g2 + 0x08] ! LSU Group
  359. st %g0, [%g2 + 0x0c] ! LSU Group
  360. st %f3, [%g2 + 0x10] ! LSU Group
  361. st %g0, [%g2 + 0x14] ! LSU Group
  362. st M14, [%g2 + 0x18] ! LSU Group
  363. st %g0, [%g2 + 0x1c] ! LSU Group
  364. cmp %o1, %o2 ! IEU1
  365. bne 1b ! CTI
  366. add %g2, 0x20, %g2 ! IEU0 Group
  367. cmp %o1, %g3
  368. be 3f
  369. nop
  370. 2: ld [%g1 + 0x00], %f0
  371. fmuls %f0, M0, %f1
  372. st %f1, [%g2 + 0x00]
  373. st %g0, [%g2 + 0x04]
  374. st M14, [%g2 + 0x08]
  375. st %g0, [%g2 + 0x0c]
  376. 3:
  377. ba __set_v4f_4
  378. nop
  379. .globl _mesa_sparc_transform_points2_general
  380. _mesa_sparc_transform_points2_general:
  381. ld [%o2 + V4F_STRIDE], %o5
  382. LDPTR [%o2 + V4F_START], %g1
  383. LDPTR [%o0 + V4F_START], %g2
  384. ld [%o2 + V4F_COUNT], %g3
  385. LDMATRIX_0_1_2_3_4_5_6_7_12_13_14_15(%o1)
  386. cmp %g3, 0
  387. st %g3, [%o0 + V4F_COUNT]
  388. be 2f
  389. clr %o1
  390. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  391. ld [%g1 + 0x04], %f1 ! LSU Group
  392. add %o1, 1, %o1 ! IEU0
  393. add %g1, %o5, %g1 ! IEU1
  394. fmuls %f0, M0, %f2 ! FGM Group
  395. fmuls %f0, M1, %f3 ! FGM Group
  396. fmuls %f0, M2, %f4 ! FGM Group
  397. fmuls %f0, M3, %f5 ! FGM Group
  398. fadds %f2, M12, %f2 ! FGA Group f2 available
  399. fmuls %f1, M4, %f6 ! FGM
  400. fadds %f3, M13, %f3 ! FGA Group f3 available
  401. fmuls %f1, M5, %f7 ! FGM
  402. fadds %f4, M14, %f4 ! FGA Group f4 available
  403. fmuls %f1, M6, %f8 ! FGM
  404. fadds %f5, M15, %f5 ! FGA Group f5 available
  405. fmuls %f1, M7, %f9 ! FGM
  406. fadds %f2, %f6, %f2 ! FGA Group f6 available
  407. st %f2, [%g2 + 0x00] ! LSU
  408. fadds %f3, %f7, %f3 ! FGA Group f7 available
  409. st %f3, [%g2 + 0x04] ! LSU
  410. fadds %f4, %f8, %f4 ! FGA Group f8 available
  411. st %f4, [%g2 + 0x08] ! LSU
  412. fadds %f5, %f9, %f5 ! FGA Group f9 available
  413. st %f5, [%g2 + 0x0c] ! LSU
  414. cmp %o1, %g3 ! IEU1
  415. bne 1b ! CTI
  416. add %g2, 0x10, %g2 ! IEU0 Group
  417. 2:
  418. ba __set_v4f_4
  419. nop
  420. .globl _mesa_sparc_transform_points2_identity
  421. _mesa_sparc_transform_points2_identity:
  422. cmp %o2, %o0
  423. be 3f
  424. ld [%o2 + V4F_STRIDE], %o5
  425. LDPTR [%o2 + V4F_START], %g1
  426. LDPTR [%o0 + V4F_START], %g2
  427. ld [%o2 + V4F_COUNT], %g3
  428. cmp %g3, 0
  429. st %g3, [%o0 + V4F_COUNT]
  430. be 2f
  431. clr %o1
  432. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  433. add %o1, 1, %o1 ! IEU0
  434. ld [%g1 + 0x04], %f1 ! LSU Group
  435. add %g1, %o5, %g1 ! IEU0
  436. cmp %o1, %g3 ! IEU1
  437. st %f0, [%g2 + 0x00] ! LSU Group
  438. st %f1, [%g2 + 0x04] ! LSU Group
  439. bne 1b ! CTI
  440. add %g2, 0x10, %g2 ! IEU0
  441. 2:
  442. ba __set_v4f_2
  443. nop
  444. 3: retl
  445. nop
  446. .globl _mesa_sparc_transform_points2_2d
  447. _mesa_sparc_transform_points2_2d:
  448. ld [%o2 + V4F_STRIDE], %o5
  449. LDPTR [%o2 + V4F_START], %g1
  450. LDPTR [%o0 + V4F_START], %g2
  451. ld [%o2 + V4F_COUNT], %g3
  452. LDMATRIX_0_1_4_5_12_13(%o1)
  453. cmp %g3, 1
  454. st %g3, [%o0 + V4F_COUNT]
  455. bl 3f
  456. clr %o1
  457. be 2f
  458. andn %g3, 1, %o2
  459. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  460. ld [%g1 + 0x04], %f1 ! LSU Group
  461. add %o1, 2, %o1 ! IEU0
  462. add %g1, %o5, %g1 ! IEU1
  463. fmuls %f0, M0, %f2 ! FGM
  464. ld [%g1 + 0x00], %f8 ! LSU Group
  465. fmuls %f0, M1, %f3 ! FGM
  466. ld [%g1 + 0x04], %f9 ! LSU Group
  467. fmuls %f1, M4, %f6 ! FGM
  468. fmuls %f1, M5, %f7 ! FGM Group
  469. add %g1, %o5, %g1 ! IEU0
  470. fmuls %f8, M0, %f10 ! FGM Group f2 available
  471. fadds %f2, M12, %f2 ! FGA
  472. fmuls %f8, M1, %f11 ! FGM Group f3 available
  473. fadds %f3, M13, %f3 ! FGA
  474. fmuls %f9, M4, %f12 ! FGM Group
  475. fmuls %f9, M5, %f13 ! FGM Group
  476. fadds %f10, M12, %f10 ! FGA Group f2, f10 available
  477. fadds %f2, %f6, %f2 ! FGA Group f3, f11 available
  478. st %f2, [%g2 + 0x00] ! LSU
  479. fadds %f11, M13, %f11 ! FGA Group f12 available
  480. fadds %f3, %f7, %f3 ! FGA Group f13 available
  481. st %f3, [%g2 + 0x04] ! LSU
  482. fadds %f10, %f12, %f10 ! FGA Group f10 available
  483. st %f10, [%g2 + 0x10] ! LSU
  484. fadds %f11, %f13, %f11 ! FGA Group f11 available
  485. st %f11, [%g2 + 0x14] ! LSU
  486. cmp %o1, %o2 ! IEU1
  487. bne 1b ! CTI
  488. add %g2, 0x20, %g2 ! IEU0 Group
  489. cmp %o1, %g3
  490. be 3f
  491. nop
  492. 2: ld [%g1 + 0x00], %f0 ! LSU Group
  493. ld [%g1 + 0x04], %f1 ! LSU Group
  494. fmuls %f0, M0, %f2 ! FGM Group
  495. fmuls %f0, M1, %f3 ! FGM Group
  496. fmuls %f1, M4, %f6 ! FGM Group
  497. fmuls %f1, M5, %f7 ! FGM Group
  498. fadds %f2, M12, %f2 ! FGA Group f2 available
  499. fadds %f3, M13, %f3 ! FGA Group f3 available
  500. fadds %f2, %f6, %f2 ! FGA Group 2 cycle stall, f2 available
  501. st %f2, [%g2 + 0x00] ! LSU
  502. fadds %f3, %f7, %f3 ! FGA Group f3 available
  503. st %f3, [%g2 + 0x04] ! LSU
  504. 3:
  505. ba __set_v4f_2
  506. nop
  507. .globl _mesa_sparc_transform_points2_2d_no_rot
  508. _mesa_sparc_transform_points2_2d_no_rot:
  509. ld [%o2 + V4F_STRIDE], %o5
  510. LDPTR [%o2 + V4F_START], %g1
  511. LDPTR [%o0 + V4F_START], %g2
  512. ld [%o2 + V4F_COUNT], %g3
  513. LDMATRIX_0_5_12_13(%o1)
  514. cmp %g3, 1
  515. st %g3, [%o0 + V4F_COUNT]
  516. bl 3f
  517. clr %o1
  518. be 2f
  519. andn %g3, 1, %o2
  520. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  521. ld [%g1 + 0x04], %f1 ! LSU Group
  522. add %o1, 2, %o1 ! IEU0
  523. add %g1, %o5, %g1 ! IEU1
  524. ld [%g1 + 0x00], %f4 ! LSU Group
  525. fmuls %f0, M0, %f2 ! FGM
  526. ld [%g1 + 0x04], %f5 ! LSU Group
  527. fmuls %f1, M5, %f3 ! FGM
  528. fmuls %f4, M0, %f6 ! FGM Group
  529. add %g1, %o5, %g1 ! IEU0
  530. fmuls %f5, M5, %f7 ! FGM Group
  531. fadds %f2, M12, %f2 ! FGA Group f2 available
  532. st %f2, [%g2 + 0x00] ! LSU
  533. fadds %f3, M13, %f3 ! FGA Group f3 available
  534. st %f3, [%g2 + 0x04] ! LSU
  535. fadds %f6, M12, %f6 ! FGA Group f6 available
  536. st %f6, [%g2 + 0x10] ! LSU
  537. fadds %f7, M13, %f7 ! FGA Group f7 available
  538. st %f7, [%g2 + 0x14] ! LSU
  539. cmp %o1, %o2 ! IEU1
  540. bne 1b ! CTI
  541. add %g2, 0x20, %g2 ! IEU0 Group
  542. cmp %o1, %g3
  543. be 3f
  544. nop
  545. 2: ld [%g1 + 0x00], %f0 ! LSU Group
  546. ld [%g1 + 0x04], %f1 ! LSU Group
  547. fmuls %f0, M0, %f2 ! FGM Group
  548. fmuls %f1, M5, %f3 ! FGM Group
  549. fadds %f2, M12, %f2 ! FGA Group, 2 cycle stall, f2 available
  550. st %f2, [%g2 + 0x00] ! LSU
  551. fadds %f3, M13, %f3 ! FGA Group f3 available
  552. st %f3, [%g2 + 0x04] ! LSU
  553. 3:
  554. ba __set_v4f_2
  555. nop
  556. /* orig: 12 cycles */
  557. .globl _mesa_sparc_transform_points2_3d
  558. _mesa_sparc_transform_points2_3d:
  559. ld [%o2 + V4F_STRIDE], %o5
  560. ld [%o2 + V4F_START], %g1
  561. ld [%o0 + V4F_START], %g2
  562. ld [%o2 + V4F_COUNT], %g3
  563. LDMATRIX_0_1_2_3_4_5_6_12_13_14(%o1)
  564. cmp %g3, 1
  565. st %g3, [%o0 + V4F_COUNT]
  566. bl 3f
  567. clr %o1
  568. be 2f
  569. andn %g3, 1, %o2
  570. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  571. ld [%g1 + 0x04], %f1 ! LSU Group
  572. add %o1, 2, %o1 ! IEU0
  573. add %g1, %o5, %g1 ! IEU1
  574. ld [%g1 + 0x00], %f9 ! LSU Group
  575. fmuls %f0, M0, %f2 ! FGM
  576. ld [%g1 + 0x04], %f10 ! LSU Group
  577. fmuls %f0, M1, %f3 ! FGM
  578. fmuls %f0, M2, %f4 ! FGM Group
  579. add %g1, %o5, %g1 ! IEU0
  580. fmuls %f1, M4, %f6 ! FGM Group
  581. fmuls %f1, M5, %f7 ! FGM Group f2 available
  582. fadds %f2, M12, %f2 ! FGA
  583. fmuls %f1, M6, %f8 ! FGM Group f3 available
  584. fadds %f3, M13, %f3 ! FGA
  585. fmuls %f9, M0, %f11 ! FGM Group f4 available
  586. fadds %f4, M14, %f4 ! FGA
  587. fmuls %f9, M1, %f12 ! FGM Group f6 available
  588. fmuls %f9, M2, %f13 ! FGM Group f2, f7 available
  589. fadds %f2, %f6, %f2 ! FGA
  590. st %f2, [%g2 + 0x00] ! LSU
  591. fmuls %f10, M4, %f14 ! FGM Group f3, f8 available
  592. fadds %f3, %f7, %f3 ! FGA
  593. st %f3, [%g2 + 0x04] ! LSU
  594. fmuls %f10, M5, %f15 ! FGM Group f4, f11 available
  595. fadds %f11, M12, %f11 ! FGA
  596. fmuls %f10, M6, %f0 ! FGM Group f12 available
  597. fadds %f12, M13, %f12 ! FGA
  598. fadds %f13, M14, %f13 ! FGA Group f13 available
  599. fadds %f4, %f8, %f4 ! FGA Group f14 available
  600. st %f4, [%g2 + 0x08] ! LSU
  601. fadds %f11, %f14, %f11 ! FGA Group f15, f11 available
  602. st %f11, [%g2 + 0x10] ! LSU
  603. fadds %f12, %f15, %f12 ! FGA Group f0, f12 available
  604. st %f12, [%g2 + 0x14] ! LSU
  605. fadds %f13, %f0, %f13 ! FGA Group f13 available
  606. st %f13, [%g2 + 0x18] ! LSU
  607. cmp %o1, %o2 ! IEU1
  608. bne 1b ! CTI
  609. add %g2, 0x20, %g2 ! IEU0 Group
  610. cmp %o1, %g3
  611. be 3f
  612. nop
  613. 2: ld [%g1 + 0x00], %f0 ! LSU Group
  614. ld [%g1 + 0x04], %f1 ! LSU Group
  615. fmuls %f0, M0, %f2 ! FGM Group
  616. fmuls %f0, M1, %f3 ! FGM Group
  617. fmuls %f0, M2, %f4 ! FGM Group
  618. fmuls %f1, M4, %f6 ! FGM Group
  619. fmuls %f1, M5, %f7 ! FGM Group f2 available
  620. fadds %f2, M12, %f2 ! FGA
  621. fmuls %f1, M6, %f8 ! FGM Group f3 available
  622. fadds %f3, M13, %f3 ! FGA
  623. fadds %f4, M14, %f4 ! FGA Group f4 available
  624. fadds %f2, %f6, %f2 ! FGA Group stall, f2, f6, f7 available
  625. st %f2, [%g2 + 0x00] ! LSU
  626. fadds %f3, %f7, %f3 ! FGA Group f3, f8 available
  627. st %f3, [%g2 + 0x04] ! LSU
  628. fadds %f4, %f8, %f4 ! FGA Group f4 available
  629. st %f4, [%g2 + 0x08] ! LSU
  630. 3:
  631. ba __set_v4f_3
  632. nop
  633. .globl _mesa_sparc_transform_points2_3d_no_rot
  634. _mesa_sparc_transform_points2_3d_no_rot:
  635. ld [%o2 + V4F_STRIDE], %o5
  636. LDPTR [%o2 + V4F_START], %g1
  637. LDPTR [%o0 + V4F_START], %g2
  638. ld [%o2 + V4F_COUNT], %g3
  639. LDMATRIX_0_5_12_13_14(%o1)
  640. cmp %g3, 1
  641. st %g3, [%o0 + V4F_COUNT]
  642. bl 3f
  643. clr %o3
  644. be 2f
  645. andn %g3, 1, %o2
  646. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  647. ld [%g1 + 0x04], %f1 ! LSU Group
  648. add %o3, 2, %o3 ! IEU0
  649. add %g1, %o5, %g1 ! IEU1
  650. ld [%g1 + 0x00], %f4 ! LSU Group
  651. fmuls %f0, M0, %f2 ! FGM
  652. ld [%g1 + 0x04], %f5 ! LSU Group
  653. fmuls %f1, M5, %f3 ! FGM
  654. fmuls %f4, M0, %f6 ! FGM Group
  655. add %g1, %o5, %g1 ! IEU0
  656. fmuls %f5, M5, %f7 ! FGM Group
  657. fadds %f2, M12, %f2 ! FGA Group f2 available
  658. st %f2, [%g2 + 0x00] ! LSU
  659. fadds %f3, M13, %f3 ! FGA Group f3 available
  660. st %f3, [%g2 + 0x04] ! LSU
  661. fadds %f6, M12, %f6 ! FGA Group f6 available
  662. st M14, [%g2 + 0x08] ! LSU
  663. fadds %f7, M13, %f7 ! FGA Group f7 available
  664. st %f6, [%g2 + 0x10] ! LSU
  665. st %f7, [%g2 + 0x14] ! LSU Group
  666. st M14, [%g2 + 0x18] ! LSU Group
  667. cmp %o3, %o2 ! IEU1
  668. bne 1b ! CTI
  669. add %g2, 0x20, %g2 ! IEU0 Group
  670. cmp %o3, %g3
  671. be 3f
  672. nop
  673. 2: ld [%g1 + 0x00], %f0 ! LSU Group
  674. ld [%g1 + 0x04], %f1 ! LSU Group
  675. fmuls %f0, M0, %f2 ! FGM Group
  676. fmuls %f1, M5, %f3 ! FGM Group
  677. fadds %f2, M12, %f2 ! FGA Group, 2 cycle stall, f2 available
  678. st %f2, [%g2 + 0x00] ! LSU
  679. fadds %f3, M13, %f3 ! FGA Group f3 available
  680. st %f3, [%g2 + 0x04] ! LSU
  681. st M14, [%g2 + 0x08] ! LSU Group
  682. 3: ld [%o1 + (14 * 0x4)], %g3
  683. cmp %g3, 0
  684. bne __set_v4f_3
  685. nop
  686. ba __set_v4f_2
  687. nop
  688. .globl _mesa_sparc_transform_points2_perspective
  689. _mesa_sparc_transform_points2_perspective:
  690. ld [%o2 + V4F_STRIDE], %o5
  691. LDPTR [%o2 + V4F_START], %g1
  692. LDPTR [%o0 + V4F_START], %g2
  693. ld [%o2 + V4F_COUNT], %g3
  694. LDMATRIX_0_5_14(%o1)
  695. cmp %g3, 0
  696. st %g3, [%o0 + V4F_COUNT]
  697. be 2f
  698. clr %o1
  699. 1: ld [%g1 + 0x00], %f0
  700. ld [%g1 + 0x04], %f1
  701. add %o1, 1, %o1
  702. add %g1, %o5, %g1
  703. fmuls %f0, M0, %f2
  704. st %f2, [%g2 + 0x00]
  705. fmuls %f1, M5, %f3
  706. st %f3, [%g2 + 0x04]
  707. st M14, [%g2 + 0x08]
  708. st %g0, [%g2 + 0x0c]
  709. cmp %o1, %g3
  710. bne 1b
  711. add %g2, 0x10, %g2
  712. 2:
  713. ba __set_v4f_4
  714. nop
  715. .globl _mesa_sparc_transform_points3_general
  716. _mesa_sparc_transform_points3_general:
  717. ld [%o2 + V4F_STRIDE], %o5
  718. LDPTR [%o2 + V4F_START], %g1
  719. LDPTR [%o0 + V4F_START], %g2
  720. ld [%o2 + V4F_COUNT], %g3
  721. LDMATRIX_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15(%o1)
  722. cmp %g3, 0
  723. st %g3, [%o0 + V4F_COUNT]
  724. be 2f
  725. clr %o1
  726. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  727. ld [%g1 + 0x04], %f1 ! LSU Group
  728. ld [%g1 + 0x08], %f2 ! LSU Group
  729. add %o1, 1, %o1 ! IEU0
  730. add %g1, %o5, %g1 ! IEU1
  731. fmuls %f0, M0, %f3 ! FGM
  732. fmuls %f1, M4, %f7 ! FGM Group
  733. fmuls %f0, M1, %f4 ! FGM Group
  734. fmuls %f1, M5, %f8 ! FGM Group
  735. fmuls %f0, M2, %f5 ! FGM Group f3 available
  736. fmuls %f1, M6, %f9 ! FGM Group f7 available
  737. fadds %f3, %f7, %f3 ! FGA
  738. fmuls %f0, M3, %f6 ! FGM Group f4 available
  739. fmuls %f1, M7, %f10 ! FGM Group f8 available
  740. fadds %f4, %f8, %f4 ! FGA
  741. fmuls %f2, M8, %f7 ! FGM Group f5 available
  742. fmuls %f2, M9, %f8 ! FGM Group f9,f3 available
  743. fadds %f5, %f9, %f5 ! FGA
  744. fmuls %f2, M10, %f9 ! FGM Group f6 available
  745. fadds %f6, %f10, %f6 ! FGA Group f10,f4 available
  746. fmuls %f2, M11, %f10 ! FGM
  747. fadds %f3, M12, %f3 ! FGA Group f7 available
  748. fadds %f4, M13, %f4 ! FGA Group f8,f5 available
  749. fadds %f5, M14, %f5 ! FGA Group f9 available
  750. fadds %f6, M15, %f6 ! FGA Group f10,f6 available
  751. fadds %f3, %f7, %f3 ! FGA Group f3 available
  752. st %f3, [%g2 + 0x00] ! LSU
  753. fadds %f4, %f8, %f4 ! FGA Group f4 available
  754. st %f4, [%g2 + 0x04] ! LSU
  755. fadds %f5, %f9, %f5 ! FGA Group f5 available
  756. st %f5, [%g2 + 0x08] ! LSU
  757. fadds %f6, %f10, %f6 ! FGA Group f6 available
  758. st %f6, [%g2 + 0x0c] ! LSU
  759. cmp %o1, %g3 ! IEU1
  760. bne 1b ! CTI
  761. add %g2, 0x10, %g2 ! IEU0 Group
  762. 2:
  763. ba __set_v4f_4
  764. nop
  765. .globl _mesa_sparc_transform_points3_identity
  766. _mesa_sparc_transform_points3_identity:
  767. ld [%o2 + V4F_STRIDE], %o5
  768. LDPTR [%o2 + V4F_START], %g1
  769. LDPTR [%o0 + V4F_START], %g2
  770. ld [%o2 + V4F_COUNT], %g3
  771. cmp %g3, 0
  772. st %g3, [%o0 + V4F_COUNT]
  773. be 2f
  774. clr %o1
  775. 1: ld [%g1 + 0x00], %f0
  776. ld [%g1 + 0x04], %f1
  777. ld [%g1 + 0x08], %f2
  778. add %o1, 1, %o1
  779. add %g1, %o5, %g1
  780. cmp %o1, %g3
  781. st %f0, [%g2 + 0x00]
  782. st %f1, [%g2 + 0x04]
  783. st %f2, [%g2 + 0x08]
  784. bne 1b
  785. add %g2, 0x10, %g2
  786. 2:
  787. ba __set_v4f_3
  788. nop
  789. .globl _mesa_sparc_transform_points3_2d
  790. _mesa_sparc_transform_points3_2d:
  791. ld [%o2 + V4F_STRIDE], %o5
  792. LDPTR [%o2 + V4F_START], %g1
  793. LDPTR [%o0 + V4F_START], %g2
  794. ld [%o2 + V4F_COUNT], %g3
  795. LDMATRIX_0_1_4_5_12_13(%o1)
  796. cmp %g3, 0
  797. st %g3, [%o0 + V4F_COUNT]
  798. be 2f
  799. clr %o1
  800. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  801. ld [%g1 + 0x04], %f1 ! LSU Group
  802. ld [%g1 + 0x08], %f2 ! LSU Group
  803. add %o1, 1, %o1 ! IEU0
  804. add %g1, %o5, %g1 ! IEU1
  805. fmuls %f0, M0, %f3 ! FGM
  806. fmuls %f0, M1, %f4 ! FGM Group
  807. fmuls %f1, M4, %f6 ! FGM Group
  808. fmuls %f1, M5, %f7 ! FGM Group
  809. fadds %f3, M12, %f3 ! FGA Group f3 available
  810. fadds %f4, M13, %f4 ! FGA Group f4 available
  811. fadds %f3, %f6, %f3 ! FGA Group f6 available
  812. st %f3, [%g2 + 0x00] ! LSU
  813. fadds %f4, %f7, %f4 ! FGA Group f7 available
  814. st %f4, [%g2 + 0x04] ! LSU
  815. st %f2, [%g2 + 0x08] ! LSU Group
  816. cmp %o1, %g3 ! IEU1
  817. bne 1b ! CTI
  818. add %g2, 0x10, %g2 ! IEU0 Group
  819. 2:
  820. ba __set_v4f_3
  821. nop
  822. .globl _mesa_sparc_transform_points3_2d_no_rot
  823. _mesa_sparc_transform_points3_2d_no_rot:
  824. ld [%o2 + V4F_STRIDE], %o5
  825. LDPTR [%o2 + V4F_START], %g1
  826. LDPTR [%o0 + V4F_START], %g2
  827. ld [%o2 + V4F_COUNT], %g3
  828. LDMATRIX_0_5_12_13(%o1)
  829. cmp %g3, 0
  830. st %g3, [%o0 + V4F_COUNT]
  831. be 2f
  832. clr %o1
  833. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  834. ld [%g1 + 0x04], %f1 ! LSU Group
  835. ld [%g1 + 0x08], %f2 ! LSU Group
  836. add %o1, 1, %o1 ! IEU0
  837. add %g1, %o5, %g1 ! IEU1
  838. fmuls %f0, M0, %f3 ! FGM
  839. fmuls %f1, M5, %f4 ! FGM Group
  840. st %f2, [%g2 + 0x08] ! LSU
  841. fadds %f3, M12, %f3 ! FGA Group
  842. st %f3, [%g2 + 0x00] ! LSU
  843. fadds %f4, M13, %f4 ! FGA Group
  844. st %f4, [%g2 + 0x04] ! LSU
  845. cmp %o1, %g3 ! IEU1
  846. bne 1b ! CTI
  847. add %g2, 0x10, %g2 ! IEU0 Group
  848. 2:
  849. ba __set_v4f_3
  850. nop
  851. .globl _mesa_sparc_transform_points3_3d
  852. _mesa_sparc_transform_points3_3d:
  853. ld [%o2 + V4F_STRIDE], %o5
  854. LDPTR [%o2 + V4F_START], %g1
  855. LDPTR [%o0 + V4F_START], %g2
  856. ld [%o2 + V4F_COUNT], %g3
  857. LDMATRIX_0_1_2_4_5_6_8_9_10_12_13_14(%o1)
  858. cmp %g3, 0
  859. st %g3, [%o0 + V4F_COUNT]
  860. be 2f
  861. clr %o1
  862. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  863. ld [%g1 + 0x04], %f1 ! LSU Group
  864. ld [%g1 + 0x08], %f2 ! LSU Group
  865. add %o1, 1, %o1 ! IEU0
  866. add %g1, %o5, %g1 ! IEU1
  867. fmuls %f0, M0, %f3 ! FGM
  868. fmuls %f1, M4, %f6 ! FGM Group
  869. fmuls %f0, M1, %f4 ! FGM Group
  870. fmuls %f1, M5, %f7 ! FGM Group
  871. fmuls %f0, M2, %f5 ! FGM Group f3 available
  872. fmuls %f1, M6, %f8 ! FGM Group f6 available
  873. fadds %f3, %f6, %f3 ! FGA
  874. fmuls %f2, M8, %f9 ! FGM Group f4 available
  875. fmuls %f2, M9, %f10 ! FGM Group f7 available
  876. fadds %f4, %f7, %f4 ! FGA
  877. fmuls %f2, M10, %f11 ! FGM Group f5 available
  878. fadds %f5, %f8, %f5 ! FGA Group f8, f3 available
  879. fadds %f3, %f9, %f3 ! FGA Group f9 available
  880. fadds %f4, %f10, %f4 ! FGA Group f10, f4 available
  881. fadds %f5, %f11, %f5 ! FGA Group stall, f11, f5 available
  882. fadds %f3, M12, %f3 ! FGA Group f3 available
  883. st %f3, [%g2 + 0x00] ! LSU
  884. fadds %f4, M13, %f4 ! FGA Group f4 available
  885. st %f4, [%g2 + 0x04] ! LSU
  886. fadds %f5, M14, %f5 ! FGA Group f5 available
  887. st %f5, [%g2 + 0x08] ! LSU
  888. cmp %o1, %g3 ! IEU1
  889. bne 1b ! CTI
  890. add %g2, 0x10, %g2 ! IEU0 Group
  891. 2:
  892. ba __set_v4f_3
  893. nop
  894. .globl _mesa_sparc_transform_points3_3d_no_rot
  895. _mesa_sparc_transform_points3_3d_no_rot:
  896. ld [%o2 + V4F_STRIDE], %o5
  897. LDPTR [%o2 + V4F_START], %g1
  898. LDPTR [%o0 + V4F_START], %g2
  899. ld [%o2 + V4F_COUNT], %g3
  900. LDMATRIX_0_5_10_12_13_14(%o1)
  901. cmp %g3, 0
  902. st %g3, [%o0 + V4F_COUNT]
  903. be 2f
  904. clr %o1
  905. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  906. ld [%g1 + 0x04], %f1 ! LSU Group
  907. ld [%g1 + 0x08], %f2 ! LSU Group
  908. add %o1, 1, %o1 ! IEU0
  909. add %g1, %o5, %g1 ! IEU1
  910. cmp %o1, %g3 ! IEU1 Group
  911. fmuls %f0, M0, %f3 ! FGM
  912. fmuls %f1, M5, %f4 ! FGM Group
  913. fmuls %f2, M10, %f5 ! FGM Group
  914. fadds %f3, M12, %f3 ! FGA Group, stall, f3 available
  915. st %f3, [%g2 + 0x00] ! LSU
  916. fadds %f4, M13, %f4 ! FGA Group, f4 available
  917. st %f4, [%g2 + 0x04] ! LSU
  918. fadds %f5, M14, %f5 ! FGA Group, f5 available
  919. st %f5, [%g2 + 0x08] ! LEU
  920. bne 1b ! CTI
  921. add %g2, 0x10, %g2 ! IEU0 Group
  922. 2:
  923. ba __set_v4f_3
  924. nop
  925. .globl _mesa_sparc_transform_points3_perspective
  926. _mesa_sparc_transform_points3_perspective:
  927. ld [%o2 + V4F_STRIDE], %o5
  928. LDPTR [%o2 + V4F_START], %g1
  929. LDPTR [%o0 + V4F_START], %g2
  930. ld [%o2 + V4F_COUNT], %g3
  931. LDMATRIX_0_5_8_9_10_14(%o1)
  932. cmp %g3, 0
  933. st %g3, [%o0 + V4F_COUNT]
  934. be 2f
  935. clr %o1
  936. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  937. ld [%g1 + 0x04], %f1 ! LSU Group
  938. ld [%g1 + 0x08], %f2 ! LSU Group
  939. add %o1, 1, %o1 ! IEU0
  940. add %g1, %o5, %g1 ! IEU1
  941. fmuls %f0, M0, %f3 ! FGM
  942. fmuls %f2, M8, %f6 ! FGM Group
  943. fmuls %f1, M5, %f4 ! FGM Group
  944. fmuls %f2, M9, %f7 ! FGM Group
  945. fmuls %f2, M10, %f5 ! FGM Group f3 available
  946. fadds %f3, %f6, %f3 ! FGA Group f6 available
  947. st %f3, [%g2 + 0x00] ! LSU
  948. fadds %f4, %f7, %f4 ! FGA Group stall, f4, f7 available
  949. st %f4, [%g2 + 0x04] ! LSU
  950. fadds %f5, M14, %f5 ! FGA Group
  951. st %f5, [%g2 + 0x08] ! LSU
  952. fnegs %f2, %f6 ! FGA Group
  953. st %f6, [%g2 + 0x0c] ! LSU
  954. cmp %o1, %g3 ! IEU1
  955. bne 1b ! CTI
  956. add %g2, 0x10, %g2 ! IEU0 Group
  957. 2:
  958. ba __set_v4f_4
  959. nop
  960. .globl _mesa_sparc_transform_points4_general
  961. _mesa_sparc_transform_points4_general:
  962. ld [%o2 + V4F_STRIDE], %o5
  963. LDPTR [%o2 + V4F_START], %g1
  964. LDPTR [%o0 + V4F_START], %g2
  965. ld [%o2 + V4F_COUNT], %g3
  966. LDMATRIX_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15(%o1)
  967. cmp %g3, 0
  968. st %g3, [%o0 + V4F_COUNT]
  969. be 2f
  970. clr %o1
  971. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  972. ld [%g1 + 0x04], %f1 ! LSU Group
  973. ld [%g1 + 0x08], %f2 ! LSU Group
  974. ld [%g1 + 0x0c], %f3 ! LSU Group
  975. add %o1, 1, %o1 ! IEU0
  976. add %g1, %o5, %g1 ! IEU1
  977. fmuls %f0, M0, %f4 ! FGM Group
  978. fmuls %f1, M4, %f8 ! FGM Group
  979. fmuls %f0, M1, %f5 ! FGM Group
  980. fmuls %f1, M5, %f9 ! FGM Group
  981. fmuls %f0, M2, %f6 ! FGM Group f4 available
  982. fmuls %f1, M6, %f10 ! FGM Group f8 available
  983. fadds %f4, %f8, %f4 ! FGA
  984. fmuls %f0, M3, %f7 ! FGM Group f5 available
  985. fmuls %f1, M7, %f11 ! FGM Group f9 available
  986. fadds %f5, %f9, %f5 ! FGA
  987. fmuls %f2, M8, %f12 ! FGM Group f6 available
  988. fmuls %f2, M9, %f13 ! FGM Group f10, f4 available
  989. fadds %f6, %f10, %f6 ! FGA
  990. fmuls %f2, M10, %f14 ! FGM Group f7 available
  991. fmuls %f2, M11, %f15 ! FGM Group f11, f5 available
  992. fadds %f7, %f11, %f7 ! FGA
  993. fmuls %f3, M12, %f8 ! FGM Group f12 available
  994. fadds %f4, %f12, %f4 ! FGA
  995. fmuls %f3, M13, %f9 ! FGM Group f13, f6 available
  996. fadds %f5, %f13, %f5 ! FGA
  997. fmuls %f3, M14, %f10 ! FGM Group f14 available
  998. fadds %f6, %f14, %f6 ! FGA
  999. fmuls %f3, M15, %f11 ! FGM Group f15, f7 available
  1000. fadds %f7, %f15, %f7 ! FGA
  1001. fadds %f4, %f8, %f4 ! FGA Group f8, f4 available
  1002. st %f4, [%g2 + 0x00] ! LSU
  1003. fadds %f5, %f9, %f5 ! FGA Group f9, f5 available
  1004. st %f5, [%g2 + 0x04] ! LSU
  1005. fadds %f6, %f10, %f6 ! FGA Group f10, f6 available
  1006. st %f6, [%g2 + 0x08] ! LSU
  1007. fadds %f7, %f11, %f7 ! FGA Group f11, f7 available
  1008. st %f7, [%g2 + 0x0c] ! LSU
  1009. cmp %o1, %g3 ! IEU1
  1010. bne 1b ! CTI
  1011. add %g2, 0x10, %g2 ! IEU0 Group
  1012. 2:
  1013. ba __set_v4f_4
  1014. nop
  1015. .globl _mesa_sparc_transform_points4_identity
  1016. _mesa_sparc_transform_points4_identity:
  1017. ld [%o2 + V4F_STRIDE], %o5
  1018. LDPTR [%o2 + V4F_START], %g1
  1019. LDPTR [%o0 + V4F_START], %g2
  1020. ld [%o2 + V4F_COUNT], %g3
  1021. cmp %g3, 0
  1022. st %g3, [%o0 + V4F_COUNT]
  1023. be 2f
  1024. clr %o1
  1025. 1: ld [%g1 + 0x00], %f0
  1026. ld [%g1 + 0x04], %f1
  1027. ld [%g1 + 0x08], %f2
  1028. add %o1, 1, %o1
  1029. ld [%g1 + 0x0c], %f3
  1030. add %g1, %o5, %g1
  1031. st %f0, [%g2 + 0x00]
  1032. st %f1, [%g2 + 0x04]
  1033. st %f2, [%g2 + 0x08]
  1034. cmp %o1, %g3
  1035. st %f3, [%g2 + 0x0c]
  1036. bne 1b
  1037. add %g2, 0x10, %g2
  1038. 2:
  1039. ba __set_v4f_4
  1040. nop
  1041. .globl _mesa_sparc_transform_points4_2d
  1042. _mesa_sparc_transform_points4_2d:
  1043. ld [%o2 + V4F_STRIDE], %o5
  1044. LDPTR [%o2 + V4F_START], %g1
  1045. LDPTR [%o0 + V4F_START], %g2
  1046. ld [%o2 + V4F_COUNT], %g3
  1047. LDMATRIX_0_1_4_5_12_13(%o1)
  1048. cmp %g3, 0
  1049. st %g3, [%o0 + V4F_COUNT]
  1050. be 2f
  1051. clr %o1
  1052. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  1053. ld [%g1 + 0x04], %f1 ! LSU Group
  1054. ld [%g1 + 0x08], %f2 ! LSU Group
  1055. ld [%g1 + 0x0c], %f3 ! LSU Group
  1056. add %o1, 1, %o1 ! IEU0
  1057. add %g1, %o5, %g1 ! IEU1
  1058. fmuls %f0, M0, %f4 ! FGM
  1059. fmuls %f1, M4, %f8 ! FGM Group
  1060. fmuls %f0, M1, %f5 ! FGM Group
  1061. fmuls %f1, M5, %f9 ! FGM Group f4 available
  1062. fmuls %f3, M12, %f12 ! FGM Group
  1063. fmuls %f3, M13, %f13 ! FGM Group f8 available
  1064. fadds %f4, %f8, %f4 ! FGA
  1065. fadds %f5, %f9, %f5 ! FGA Group stall, f5, f9 available
  1066. fadds %f4, %f12, %f4 ! FGA Group 2 cycle stall, f4, f12, f13 avail
  1067. st %f4, [%g2 + 0x00] ! LSU
  1068. fadds %f5, %f13, %f5 ! FGA Group f5 available
  1069. st %f5, [%g2 + 0x04] ! LSU
  1070. st %f2, [%g2 + 0x08] ! LSU Group
  1071. st %f3, [%g2 + 0x0c] ! LSU Group
  1072. cmp %o1, %g3 ! IEU1
  1073. bne 1b ! CTI
  1074. add %g2, 0x10, %g2 ! IEU0 Group
  1075. 2:
  1076. ba __set_v4f_4
  1077. nop
  1078. .globl _mesa_sparc_transform_points4_2d_no_rot
  1079. _mesa_sparc_transform_points4_2d_no_rot:
  1080. ld [%o2 + V4F_STRIDE], %o5
  1081. LDPTR [%o2 + V4F_START], %g1
  1082. LDPTR [%o0 + V4F_START], %g2
  1083. ld [%o2 + V4F_COUNT], %g3
  1084. LDMATRIX_0_1_4_5_12_13(%o1)
  1085. cmp %g3, 0
  1086. st %g3, [%o0 + V4F_COUNT]
  1087. be 2f
  1088. clr %o1
  1089. 1: ld [%g1 + 0x00], %f0
  1090. ld [%g1 + 0x04], %f1
  1091. ld [%g1 + 0x08], %f2
  1092. ld [%g1 + 0x0c], %f3
  1093. add %o1, 1, %o1
  1094. add %g1, %o5, %g1
  1095. fmuls %f0, M0, %f4
  1096. fmuls %f3, M12, %f8
  1097. fmuls %f1, M5, %f5
  1098. fmuls %f3, M13, %f9
  1099. fadds %f4, %f8, %f4
  1100. st %f4, [%g2 + 0x00]
  1101. fadds %f5, %f9, %f5
  1102. st %f5, [%g2 + 0x04]
  1103. st %f2, [%g2 + 0x08]
  1104. st %f3, [%g2 + 0x0c]
  1105. cmp %o1, %g3
  1106. bne 1b
  1107. add %g2, 0x10, %g2
  1108. 2:
  1109. ba __set_v4f_4
  1110. nop
  1111. .globl _mesa_sparc_transform_points4_3d
  1112. _mesa_sparc_transform_points4_3d:
  1113. ld [%o2 + V4F_STRIDE], %o5
  1114. LDPTR [%o2 + V4F_START], %g1
  1115. LDPTR [%o0 + V4F_START], %g2
  1116. ld [%o2 + V4F_COUNT], %g3
  1117. LDMATRIX_0_1_2_4_5_6_8_9_10_12_13_14(%o1)
  1118. cmp %g3, 0
  1119. st %g3, [%o0 + V4F_COUNT]
  1120. be 2f
  1121. clr %o1
  1122. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  1123. ld [%g1 + 0x04], %f1 ! LSU Group
  1124. ld [%g1 + 0x08], %f2 ! LSU Group
  1125. ld [%g1 + 0x0c], %f3 ! LSU Group
  1126. add %o1, 1, %o1 ! IEU0
  1127. add %g1, %o5, %g1 ! IEU1
  1128. fmuls %f0, M0, %f4 ! FGM
  1129. fmuls %f1, M4, %f7 ! FGM Group
  1130. fmuls %f0, M1, %f5 ! FGM Group
  1131. fmuls %f1, M5, %f8 ! FGM Group
  1132. fmuls %f0, M2, %f6 ! FGM Group f4 available
  1133. fmuls %f1, M6, %f9 ! FGM Group f7 available
  1134. fadds %f4, %f7, %f4 ! FGA
  1135. fmuls %f2, M8, %f10 ! FGM Group f5 available
  1136. fmuls %f2, M9, %f11 ! FGM Group f8 available
  1137. fadds %f5, %f8, %f5 ! FGA
  1138. fmuls %f2, M10, %f12 ! FGM Group f6 available
  1139. fmuls %f3, M12, %f13 ! FGM Group f9, f4 available
  1140. fadds %f6, %f9, %f6 ! FGA
  1141. fmuls %f3, M13, %f14 ! FGM Group f10 available
  1142. fadds %f4, %f10, %f4 ! FGA
  1143. fmuls %f3, M14, %f15 ! FGM Group f11, f5 available
  1144. fadds %f5, %f11, %f5 ! FGA
  1145. fadds %f6, %f12, %f6 ! FGA Group stall, f12, f13, f6 available
  1146. fadds %f4, %f13, %f4 ! FGA Group f14, f4 available
  1147. st %f4, [%g2 + 0x00] ! LSU
  1148. fadds %f5, %f14, %f5 ! FGA Group f15, f5 available
  1149. st %f5, [%g2 + 0x04] ! LSU
  1150. fadds %f6, %f15, %f6 ! FGA Group f6 available
  1151. st %f6, [%g2 + 0x08] ! LSU
  1152. st %f3, [%g2 + 0x0c] ! LSU Group
  1153. cmp %o1, %g3 ! IEU1
  1154. bne 1b ! CTI
  1155. add %g2, 0x10, %g2 ! IEU0 Group
  1156. 2:
  1157. ba __set_v4f_4
  1158. nop
  1159. .globl _mesa_sparc_transform_points4_3d_no_rot
  1160. _mesa_sparc_transform_points4_3d_no_rot:
  1161. ld [%o2 + V4F_STRIDE], %o5
  1162. LDPTR [%o2 + V4F_START], %g1
  1163. LDPTR [%o0 + V4F_START], %g2
  1164. ld [%o2 + V4F_COUNT], %g3
  1165. LDMATRIX_0_5_10_12_13_14(%o1)
  1166. cmp %g3, 0
  1167. st %g3, [%o0 + V4F_COUNT]
  1168. be 2f
  1169. clr %o1
  1170. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  1171. ld [%g1 + 0x04], %f1 ! LSU Group
  1172. ld [%g1 + 0x08], %f2 ! LSU Group
  1173. ld [%g1 + 0x0c], %f3 ! LSU Group
  1174. add %o1, 1, %o1 ! IEU0
  1175. add %g1, %o5, %g1 ! IEU1
  1176. fmuls %f0, M0, %f4 ! FGM
  1177. fmuls %f3, M12, %f7 ! FGM Group
  1178. fmuls %f1, M5, %f5 ! FGM Group
  1179. fmuls %f3, M13, %f8 ! FGM Group
  1180. fmuls %f2, M10, %f6 ! FGM Group f4 available
  1181. fmuls %f3, M14, %f9 ! FGM Group f7 available
  1182. fadds %f4, %f7, %f4 ! FGA
  1183. st %f4, [%g2 + 0x00] ! LSU
  1184. fadds %f5, %f8, %f5 ! FGA Group stall, f5, f8 available
  1185. st %f5, [%g2 + 0x04] ! LSU
  1186. fadds %f6, %f9, %f6 ! FGA Group stall, f6, f9 available
  1187. st %f6, [%g2 + 0x08] ! LSU
  1188. st %f3, [%g2 + 0x0c] ! LSU Group
  1189. cmp %o1, %g3 ! IEU1
  1190. bne 1b ! CTI
  1191. add %g2, 0x10, %g2 ! IEU0 Group
  1192. 2:
  1193. ba __set_v4f_4
  1194. nop
  1195. .globl _mesa_sparc_transform_points4_perspective
  1196. _mesa_sparc_transform_points4_perspective:
  1197. ld [%o2 + V4F_STRIDE], %o5
  1198. LDPTR [%o2 + V4F_START], %g1
  1199. LDPTR [%o0 + V4F_START], %g2
  1200. ld [%o2 + V4F_COUNT], %g3
  1201. LDMATRIX_0_5_8_9_10_14(%o1)
  1202. cmp %g3, 0
  1203. st %g3, [%o0 + V4F_COUNT]
  1204. be 2f
  1205. clr %o1
  1206. 1: ld [%g1 + 0x00], %f0 ! LSU Group
  1207. ld [%g1 + 0x04], %f1 ! LSU Group
  1208. ld [%g1 + 0x08], %f2 ! LSU Group
  1209. ld [%g1 + 0x0c], %f3 ! LSU Group
  1210. add %o1, 1, %o1 ! IEU0
  1211. add %g1, %o5, %g1 ! IEU1
  1212. fmuls %f0, M0, %f4 ! FGM
  1213. fmuls %f2, M8, %f7 ! FGM Group
  1214. fmuls %f1, M5, %f5 ! FGM Group
  1215. fmuls %f2, M9, %f8 ! FGM Group
  1216. fmuls %f2, M10, %f6 ! FGM Group f4 available
  1217. fmuls %f3, M14, %f9 ! FGM Group f7 available
  1218. fadds %f4, %f7, %f4 ! FGA
  1219. st %f4, [%g2 + 0x00] ! LSU
  1220. fadds %f5, %f8, %f5 ! FGA Group stall, f5, f8 available
  1221. st %f5, [%g2 + 0x04] ! LSU
  1222. fadds %f6, %f9, %f6 ! FGA Group stall, f6, f9 available
  1223. st %f6, [%g2 + 0x08] ! LSU
  1224. fnegs %f2, %f7 ! FGA Group
  1225. st %f7, [%g2 + 0x0c] ! LSU
  1226. cmp %o1, %g3 ! IEU1
  1227. bne 1b ! CTI
  1228. add %g2, 0x10, %g2 ! IEU0 Group
  1229. 2:
  1230. ba __set_v4f_4
  1231. nop