Advertisement
cr88192

BJX2, Color Cell Encode, BJX2 ASM

Jul 24th, 2018
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.55 KB | None | 0 0
  1. #if 1
  2. /*
  3. R4=src
  4. R5=lsrc
  5. R6=rdsta
  6. R7=rdstb
  7. */
  8.  
  9. // void TK_EncBlock16P(u16 *src, u16 *lsrc, u32 *rdsta, u32 *rdstb);
  10.  
  11. TK_EncBlock16P:
  12.  
  13. /* Load the pixels for the block. */
  14. mov.q @(r4, 0), r18
  15. mov.q @(r4, 640), r19
  16. mov.q @(r4, 1280), r20
  17. mov.q @(r4, 1920), r21
  18.  
  19. mov.q @(r5, 0), r22
  20.  
  21. xor r2, r2 //i
  22. cmpqeq r18, r22
  23. movnt r2
  24.  
  25. /* Branch Early, we already know block differs. */
  26. bf .L0
  27.  
  28. /* Load remaining pixels to compare against. */
  29. mov.q @(r5, 640), r23
  30. mov.q @(r5, 1280), r16
  31. mov.q @(r5, 1920), r17
  32.  
  33. /* Check if any pixels differ. */
  34. cmpqeq r19, r23
  35. movnt r3
  36. or r3, r2
  37.  
  38. cmpqeq r20, r16
  39. movnt r3
  40. or r3, r2
  41.  
  42. cmpqeq r21, r17
  43. movnt r3
  44. or r3, r2
  45.  
  46. tst r2, r2
  47. bf .L0
  48.  
  49. /* Nothing changed, return now. */
  50. rts
  51.  
  52. /*
  53. At this point, we know we need to actually encode the block.
  54. R16=cmin
  55. R17=cmax
  56. R18=lpx0
  57. R19=lpx1
  58. R20=lpx2
  59. R21=lpx3
  60. */
  61.  
  62. .L0:
  63.  
  64. /* Copy updated pixels to lsrc. */
  65. mov.q r18, @(r5, 0)
  66. mov.q r19, @(r5, 640)
  67. mov.q r20, @(r5, 1280)
  68. mov.q r21, @(r5, 1920)
  69.  
  70. /*
  71. Find lightest and darkest pixels.
  72. Shortcut is to only check half the pixels.
  73. Other pixels assumed to be in-between the ones checked.
  74. Should work correctly most of the time.
  75. */
  76.  
  77. mov #65535, r16
  78. mov #-1, r17
  79.  
  80. shld r18, #-16, r2
  81. cmpgt r16, r2
  82. cselt r16, r2, r16
  83. cmpgt r17, r2
  84. cselt r2, r17, r17
  85.  
  86. shld.q r18, #-48, r2
  87. cmpgt r16, r2
  88. cselt r16, r2, r16
  89. cmpgt r17, r2
  90. cselt r2, r17, r17
  91.  
  92.  
  93. extu.w r19, r2
  94. cmpgt r16, r2
  95. cselt r16, r2, r16
  96. cmpgt r17, r2
  97. cselt r2, r17, r17
  98.  
  99. shld.q r19, #-32, r2
  100. extu.w r2
  101. cmpgt r16, r2
  102. cselt r16, r2, r16
  103. cmpgt r17, r2
  104. cselt r2, r17, r17
  105.  
  106.  
  107. shld r20, #-16, r2
  108. cmpgt r16, r2
  109. cselt r16, r2, r16
  110. cmpgt r17, r2
  111. cselt r2, r17, r17
  112.  
  113. shld.q r20, #-48, r2
  114. cmpgt r16, r2
  115. cselt r16, r2, r16
  116. cmpgt r17, r2
  117. cselt r2, r17, r17
  118.  
  119.  
  120. extu.w r21, r2
  121. cmpgt r16, r2
  122. cselt r16, r2, r16
  123. cmpgt r17, r2
  124. cselt r2, r17, r17
  125.  
  126. shld.q r21, #-32, r2
  127. extu.w r2
  128. cmpgt r16, r2
  129. cselt r16, r2, r16
  130. cmpgt r17, r2
  131. cselt r2, r17, r17
  132.  
  133. /*
  134. Now time to start encoding pixel bits for individual pixels.
  135.  
  136. At this point:
  137. R0=DLR
  138. R1=DHR, Zero
  139. R2=scratch
  140. R3=px2
  141. R4=calo
  142. R5=cahi
  143. R16=cmin
  144. R17=cmax
  145. R18=lpx0
  146. R19=lpx1
  147. R20=lpx2
  148. R21=lpx3
  149. R22=cavg
  150. R23=-
  151. */
  152.  
  153. add r16, r17, r22
  154. shad r22, #-1, r22
  155. // shlr1 r22
  156.  
  157. add r16, r22, r4
  158. add r17, r22, r5
  159. shlr1 r4
  160. shlr1 r5
  161.  
  162.  
  163. xor r1, r1
  164.  
  165. /* lpx0 */
  166.  
  167. extu.w r18, r2
  168. cmpgt r22, r2
  169. addc r3, r3
  170. cmpgt r5, r2
  171. addc r3, r3
  172. cmpgt r2, r4
  173. addc r1, r3
  174.  
  175. shld r18, #-16, r2
  176. cmpgt r22, r2
  177. addc r3, r3
  178. cmpgt r5, r2
  179. addc r3, r3
  180. cmpgt r2, r4
  181. addc r1, r3
  182.  
  183. shld.q r18, #-32, r2
  184. extu.w r2
  185. cmpgt r22, r2
  186. addc r3, r3
  187. cmpgt r5, r2
  188. addc r3, r3
  189. cmpgt r2, r4
  190. addc r1, r3
  191.  
  192. shld.q r18, #-48, r2
  193. cmpgt r22, r2
  194. addc r3, r3
  195. cmpgt r5, r2
  196. addc r3, r3
  197. cmpgt r2, r4
  198. addc r1, r3
  199.  
  200.  
  201. /* lpx1 */
  202.  
  203. extu.w r19, r2
  204. cmpgt r22, r2
  205. addc r3, r3
  206. cmpgt r5, r2
  207. addc r3, r3
  208. cmpgt r2, r4
  209. addc r1, r3
  210.  
  211. shld r19, #-16, r2
  212. extu.w r2
  213. cmpgt r22, r2
  214. addc r3, r3
  215. cmpgt r5, r2
  216. addc r3, r3
  217. cmpgt r2, r4
  218. addc r1, r3
  219.  
  220. shld.q r19, #-32, r2
  221. extu.w r2
  222. cmpgt r22, r2
  223. addc r3, r3
  224. cmpgt r5, r2
  225. addc r3, r3
  226. cmpgt r2, r4
  227. addc r1, r3
  228.  
  229. shld.q r19, #-48, r2
  230. cmpgt r22, r2
  231. addc r3, r3
  232. cmpgt r5, r2
  233. addc r3, r3
  234. cmpgt r2, r4
  235. addc r1, r3
  236.  
  237.  
  238. /* lpx2 */
  239.  
  240. extu.w r20, r2
  241. cmpgt r22, r2
  242. addc r3, r3
  243. cmpgt r5, r2
  244. addc r3, r3
  245. cmpgt r2, r4
  246. addc r1, r3
  247.  
  248. shld r20, #-16, r2
  249. extu.w r2
  250. cmpgt r22, r2
  251. addc r3, r3
  252. cmpgt r5, r2
  253. addc r3, r3
  254. cmpgt r2, r4
  255. addc r1, r3
  256.  
  257. shld.q r20, #-32, r2
  258. extu.w r2
  259. cmpgt r22, r2
  260. addc r3, r3
  261. cmpgt r5, r2
  262. addc r3, r3
  263. cmpgt r2, r4
  264. addc r1, r3
  265.  
  266. shld.q r20, #-48, r2
  267. cmpgt r22, r2
  268. addc r3, r3
  269. cmpgt r5, r2
  270. addc r3, r3
  271. cmpgt r2, r4
  272. addc r1, r3
  273.  
  274.  
  275. /* lpx3 */
  276.  
  277. extu.w r21, r2
  278. cmpgt r22, r2
  279. addc r3, r3
  280. cmpgt r5, r2
  281. addc r3, r3
  282. cmpgt r2, r4
  283. addc r1, r3
  284.  
  285. shld r21, #-16, r2
  286. cmpgt r22, r2
  287. addc r3, r3
  288. cmpgt r5, r2
  289. addc r3, r3
  290. cmpgt r2, r4
  291. addc r1, r3
  292.  
  293. shld.q r21, #-32, r2
  294. extu.w r2
  295. cmpgt r22, r2
  296. addc r3, r3
  297. cmpgt r5, r2
  298. addc r3, r3
  299. cmpgt r2, r4
  300. addc r1, r3
  301.  
  302. shld.q r21, #-48, r2
  303. cmpgt r22, r2
  304. addc r3, r3
  305. cmpgt r5, r2
  306. addc r3, r3
  307. cmpgt r2, r4
  308. addc r1, r3
  309.  
  310.  
  311. mov r3, r2
  312. shlr1 r2
  313. not r2
  314. and #0x55555555, r2
  315. xor r2, r3
  316.  
  317. shld r16, #-1, r16
  318. shld r17, #-1, r17
  319. add r16, #0x18000, r2
  320. shll16 r2
  321. shlr1 r2
  322. or r17, r2
  323.  
  324. mov.l r2, @r6
  325. mov.l r3, @r7
  326. rts
  327.  
  328. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement