PageRenderTime 56ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/java-1.7.0-openjdk/openjdk/jdk/src/share/native/sun/awt/medialib/mlib_ImageLookUp_64.c

#
C | 1053 lines | 882 code | 94 blank | 77 comment | 96 complexity | 4c455336755927044caa3d4554ddf0ca MD5 | raw file
Possible License(s): GPL-2.0, BSD-3-Clause-No-Nuclear-License-2014, LGPL-3.0, LGPL-2.0
  1. /*
  2. * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
  3. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4. *
  5. * This code is free software; you can redistribute it and/or modify it
  6. * under the terms of the GNU General Public License version 2 only, as
  7. * published by the Free Software Foundation. Oracle designates this
  8. * particular file as subject to the "Classpath" exception as provided
  9. * by Oracle in the LICENSE file that accompanied this code.
  10. *
  11. * This code is distributed in the hope that it will be useful, but WITHOUT
  12. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
  14. * version 2 for more details (a copy is included in the LICENSE file that
  15. * accompanied this code).
  16. *
  17. * You should have received a copy of the GNU General Public License version
  18. * 2 along with this work; if not, write to the Free Software Foundation,
  19. * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20. *
  21. * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22. * or visit www.oracle.com if you need additional information or have any
  23. * questions.
  24. */
  25. /*
  26. * FUNCTION
  27. * mlib_ImageLookUp_U8D64 - table lookup
  28. * mlib_ImageLookUp_S16D64 - table lookup
  29. * mlib_ImageLookUp_U16D64 - table lookup
  30. * mlib_ImageLookUp_S32D64 - table lookup
  31. *
  32. * SYNOPSIS
  33. * void mlib_ImageLookUp_U8_D64(src, slb,
  34. * dst, dlb,
  35. * xsize, ysize,
  36. * csize, table)
  37. *
  38. * void mlib_ImageLookUp_S16_D64(src, slb,
  39. * dst, dlb,
  40. * xsize, ysize,
  41. * csize, table)
  42. *
  43. * void mlib_ImageLookUp_U16_D64(src, slb,
  44. * dst, dlb,
  45. * xsize, ysize,
  46. * csize, table)
  47. *
  48. * void mlib_ImageLookUp_S32_D64(src, slb,
  49. * dst, dlb,
  50. * xsize, ysize,
  51. * csize, table)
  52. *
  53. * ARGUMENT
  54. * src pointer to input image (BYTE, SHORT, USHORT, INT)
  55. * slb stride of input image (in pixels)
  56. * dst pointer to output image (DOUBLE)
  57. * dlb stride of output image (in pixels)
  58. * xsize image width
  59. * ysize image height
  60. * csize number of channels
  61. * table lookup table
  62. *
  63. * DESCRIPTION
  64. * dst = table[src] (c, vis version)
  65. */
  66. #include "mlib_image.h"
  67. #include "mlib_ImageLookUp.h"
  68. /***************************************************************/
  69. #define MLIB_C_IMAGELOOKUP(DTYPE, STYPE, TABLE) \
  70. { \
  71. mlib_s32 i, j, k; \
  72. \
  73. if (xsize < 2) { \
  74. for(j = 0; j < ysize; j++, dst += dlb, src += slb){ \
  75. for(k = 0; k < csize; k++) { \
  76. DTYPE *da = dst + k; \
  77. const STYPE *sa = src + k; \
  78. DTYPE *tab = (DTYPE*) TABLE[k]; \
  79. \
  80. for(i = 0; i < xsize; i++, da += csize, sa += csize) \
  81. *da=tab[*sa]; \
  82. } \
  83. } \
  84. } else { \
  85. for(j = 0; j < ysize; j++, dst += dlb, src += slb) { \
  86. for(k = 0; k < csize; k++) { \
  87. DTYPE *da = dst + k; \
  88. const STYPE *sa = src + k; \
  89. DTYPE *tab = (DTYPE*) TABLE[k]; \
  90. mlib_s32 s0, s1; \
  91. DTYPE t0, t1; \
  92. \
  93. s0 = (mlib_s32)sa[0]; \
  94. s1 = (mlib_s32)sa[csize]; \
  95. sa += 2*csize; \
  96. \
  97. for(i = 0; \
  98. i < xsize - 3; \
  99. i+=2, da += 2*csize, sa += 2*csize) { \
  100. t0 = tab[s0]; \
  101. t1 = tab[s1]; \
  102. s0 = (mlib_s32)sa[0]; \
  103. s1 = (mlib_s32)sa[csize]; \
  104. da[0] = (DTYPE)t0; \
  105. da[csize] = (DTYPE)t1; \
  106. } \
  107. t0 = tab[s0]; \
  108. t1 = tab[s1]; \
  109. da[0] = (DTYPE)t0; \
  110. da[csize] = (DTYPE)t1; \
  111. if (xsize & 1) da[2*csize] = tab[sa[0]]; \
  112. } \
  113. } \
  114. } \
  115. }
  116. /***************************************************************/
  117. #define MLIB_C_IMAGELOOKUPSI(DTYPE, STYPE, TABLE) \
  118. { \
  119. mlib_s32 i, j, k; \
  120. \
  121. if (xsize < 2) { \
  122. for(j = 0; j < ysize; j++, dst += dlb, src += slb){ \
  123. for(k = 0; k < csize; k++) { \
  124. DTYPE *da = dst + k; \
  125. const STYPE *sa = (void *)src; \
  126. DTYPE *tab = (DTYPE*) TABLE[k]; \
  127. \
  128. for(i = 0; i < xsize; i++, da += csize, sa ++) \
  129. *da=tab[*sa]; \
  130. } \
  131. } \
  132. } else { \
  133. for(j = 0; j < ysize; j++, dst += dlb, src += slb) { \
  134. for(k = 0; k < csize; k++) { \
  135. DTYPE *da = dst + k; \
  136. const STYPE *sa = (void *)src; \
  137. DTYPE *tab = (DTYPE*) TABLE[k]; \
  138. mlib_s32 s0, s1; \
  139. DTYPE t0, t1; \
  140. \
  141. s0 = (mlib_s32)sa[0]; \
  142. s1 = (mlib_s32)sa[1]; \
  143. sa += 2; \
  144. \
  145. for(i = 0; \
  146. i < xsize - 3; \
  147. i+=2, da += 2*csize, sa += 2) { \
  148. t0 = tab[s0]; \
  149. t1 = tab[s1]; \
  150. s0 = (mlib_s32)sa[0]; \
  151. s1 = (mlib_s32)sa[1]; \
  152. da[0] = (DTYPE)t0; \
  153. da[csize] = (DTYPE)t1; \
  154. } \
  155. t0 = tab[s0]; \
  156. t1 = tab[s1]; \
  157. da[0] = (DTYPE)t0; \
  158. da[csize] = (DTYPE)t1; \
  159. if (xsize & 1) da[2*csize] = tab[sa[0]]; \
  160. } \
  161. } \
  162. } \
  163. }
  164. /***************************************************************/
  165. #ifdef _LITTLE_ENDIAN
  166. #define READ_U8_D64(table0, table1, table2, table3) \
  167. t0 = *(mlib_d64*)((mlib_u8*)table0 + ((s0 << 3) & 0x7F8)); \
  168. t1 = *(mlib_d64*)((mlib_u8*)table1 + ((s0 >> 5) & 0x7F8)); \
  169. t2 = *(mlib_d64*)((mlib_u8*)table2 + ((s0 >> 13) & 0x7F8)); \
  170. t3 = *(mlib_d64*)((mlib_u8*)table3 + ((s0 >> 21) & 0x7F8))
  171. #else
  172. #define READ_U8_D64(table0, table1, table2, table3) \
  173. t0 = *(mlib_d64*)((mlib_u8*)table0 + ((s0 >> 21) & 0x7F8)); \
  174. t1 = *(mlib_d64*)((mlib_u8*)table1 + ((s0 >> 13) & 0x7F8)); \
  175. t2 = *(mlib_d64*)((mlib_u8*)table2 + ((s0 >> 5) & 0x7F8)); \
  176. t3 = *(mlib_d64*)((mlib_u8*)table3 + ((s0 << 3) & 0x7F8))
  177. #endif /* _LITTLE_ENDIAN */
  178. /***************************************************************/
  179. void mlib_ImageLookUp_U8_D64(const mlib_u8 *src,
  180. mlib_s32 slb,
  181. mlib_d64 *dst,
  182. mlib_s32 dlb,
  183. mlib_s32 xsize,
  184. mlib_s32 ysize,
  185. mlib_s32 csize,
  186. const mlib_d64 **table)
  187. {
  188. if (xsize * csize < 7) {
  189. MLIB_C_IMAGELOOKUP(mlib_d64, mlib_u8, table);
  190. }
  191. else if (csize == 1) {
  192. mlib_s32 i, j;
  193. for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
  194. mlib_u32 *sa;
  195. mlib_d64 *tab = (mlib_d64 *) table[0];
  196. mlib_u32 s0;
  197. mlib_d64 t0, t1, t2, t3;
  198. mlib_s32 off;
  199. mlib_s32 size = xsize;
  200. mlib_d64 *dp = (mlib_d64 *) dst;
  201. mlib_u8 *sp = (void *)src;
  202. off = (mlib_s32) ((4 - ((mlib_addr) src & 3)) & 3);
  203. for (i = 0; i < off; i++, sp++) {
  204. *dp++ = tab[sp[0]];
  205. size--;
  206. }
  207. sa = (mlib_u32 *) sp;
  208. s0 = sa[0];
  209. sa++;
  210. #ifdef __SUNPRO_C
  211. #pragma pipeloop(0)
  212. #endif /* __SUNPRO_C */
  213. for (i = 0; i < size - 7; i += 4, dp += 4, sa++) {
  214. READ_U8_D64(tab, tab, tab, tab);
  215. s0 = sa[0];
  216. dp[0] = t0;
  217. dp[1] = t1;
  218. dp[2] = t2;
  219. dp[3] = t3;
  220. }
  221. READ_U8_D64(tab, tab, tab, tab);
  222. dp[0] = t0;
  223. dp[1] = t1;
  224. dp[2] = t2;
  225. dp[3] = t3;
  226. dp += 4;
  227. sp = (mlib_u8 *) sa;
  228. i += 4;
  229. for (; i < size; i++, dp++, sp++)
  230. dp[0] = tab[sp[0]];
  231. }
  232. }
  233. else if (csize == 2) {
  234. mlib_s32 i, j;
  235. for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
  236. mlib_u32 *sa;
  237. mlib_d64 *tab0 = (mlib_d64 *) table[0];
  238. mlib_d64 *tab1 = (mlib_d64 *) table[1];
  239. mlib_d64 *tab;
  240. mlib_u32 s0;
  241. mlib_d64 t0, t1, t2, t3;
  242. mlib_s32 off;
  243. mlib_s32 size = xsize * 2;
  244. mlib_d64 *dp = (mlib_d64 *) dst;
  245. mlib_u8 *sp = (void *)src;
  246. off = (mlib_s32) ((4 - ((mlib_addr) src & 3)) & 3);
  247. for (i = 0; i < off - 1; i += 2, sp += 2) {
  248. *dp++ = tab0[sp[0]];
  249. *dp++ = tab1[sp[1]];
  250. size -= 2;
  251. }
  252. if ((off & 1) != 0) {
  253. *dp++ = tab0[*sp];
  254. size--;
  255. sp++;
  256. tab = tab0;
  257. tab0 = tab1;
  258. tab1 = tab;
  259. }
  260. sa = (mlib_u32 *) sp;
  261. s0 = sa[0];
  262. sa++;
  263. #ifdef __SUNPRO_C
  264. #pragma pipeloop(0)
  265. #endif /* __SUNPRO_C */
  266. for (i = 0; i < size - 7; i += 4, dp += 4, sa++) {
  267. READ_U8_D64(tab0, tab1, tab0, tab1);
  268. s0 = sa[0];
  269. dp[0] = t0;
  270. dp[1] = t1;
  271. dp[2] = t2;
  272. dp[3] = t3;
  273. }
  274. READ_U8_D64(tab0, tab1, tab0, tab1);
  275. dp[0] = t0;
  276. dp[1] = t1;
  277. dp[2] = t2;
  278. dp[3] = t3;
  279. dp += 4;
  280. sp = (mlib_u8 *) sa;
  281. i += 4;
  282. for (; i < size - 1; i += 2, sp += 2) {
  283. *dp++ = tab0[sp[0]];
  284. *dp++ = tab1[sp[1]];
  285. }
  286. if (i < size)
  287. *dp = tab0[(*sp)];
  288. }
  289. }
  290. else if (csize == 3) {
  291. mlib_s32 i, j;
  292. for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
  293. mlib_u32 *sa;
  294. mlib_d64 *tab0 = (mlib_d64 *) table[0];
  295. mlib_d64 *tab1 = (mlib_d64 *) table[1];
  296. mlib_d64 *tab2 = (mlib_d64 *) table[2];
  297. mlib_d64 *tab;
  298. mlib_u32 s0;
  299. mlib_d64 t0, t1, t2, t3;
  300. mlib_s32 off;
  301. mlib_s32 size = xsize * 3;
  302. mlib_d64 *dp = (mlib_d64 *) dst;
  303. mlib_u8 *sp = (void *)src;
  304. off = (mlib_s32) ((4 - ((mlib_addr) src & 3)) & 3);
  305. if (off == 1) {
  306. *dp++ = tab0[(*sp)];
  307. tab = tab0;
  308. tab0 = tab1;
  309. tab1 = tab2;
  310. tab2 = tab;
  311. size--;
  312. sp++;
  313. }
  314. else if (off == 2) {
  315. *dp++ = tab0[sp[0]];
  316. *dp++ = tab1[sp[1]];
  317. tab = tab2;
  318. tab2 = tab1;
  319. tab1 = tab0;
  320. tab0 = tab;
  321. size -= 2;
  322. sp += 2;
  323. }
  324. else if (off == 3) {
  325. *dp++ = tab0[sp[0]];
  326. *dp++ = tab1[sp[1]];
  327. *dp++ = tab2[sp[2]];
  328. size -= 3;
  329. sp += 3;
  330. }
  331. sa = (mlib_u32 *) sp;
  332. s0 = sa[0];
  333. sa++;
  334. #ifdef __SUNPRO_C
  335. #pragma pipeloop(0)
  336. #endif /* __SUNPRO_C */
  337. for (i = 0; i < size - 7; i += 4, dp += 4, sa++) {
  338. READ_U8_D64(tab0, tab1, tab2, tab0);
  339. tab = tab0;
  340. tab0 = tab1;
  341. tab1 = tab2;
  342. tab2 = tab;
  343. s0 = sa[0];
  344. dp[0] = t0;
  345. dp[1] = t1;
  346. dp[2] = t2;
  347. dp[3] = t3;
  348. }
  349. READ_U8_D64(tab0, tab1, tab2, tab0);
  350. dp[0] = t0;
  351. dp[1] = t1;
  352. dp[2] = t2;
  353. dp[3] = t3;
  354. dp += 4;
  355. sp = (mlib_u8 *) sa;
  356. i += 4;
  357. if (i < size) {
  358. *dp++ = tab1[(*sp)];
  359. i++;
  360. sp++;
  361. }
  362. if (i < size) {
  363. *dp++ = tab2[(*sp)];
  364. i++;
  365. sp++;
  366. }
  367. if (i < size) {
  368. *dp = tab0[(*sp)];
  369. }
  370. }
  371. }
  372. else if (csize == 4) {
  373. mlib_s32 i, j;
  374. for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
  375. mlib_u32 *sa;
  376. mlib_d64 *tab0 = (mlib_d64 *) table[0];
  377. mlib_d64 *tab1 = (mlib_d64 *) table[1];
  378. mlib_d64 *tab2 = (mlib_d64 *) table[2];
  379. mlib_d64 *tab3 = (mlib_d64 *) table[3];
  380. mlib_d64 *tab;
  381. mlib_u32 s0;
  382. mlib_d64 t0, t1, t2, t3;
  383. mlib_s32 off;
  384. mlib_s32 size = xsize * 4;
  385. mlib_d64 *dp = (mlib_d64 *) dst;
  386. mlib_u8 *sp = (void *)src;
  387. off = (mlib_s32) ((4 - ((mlib_addr) src & 3)) & 3);
  388. if (off == 1) {
  389. *dp++ = tab0[(*sp)];
  390. tab = tab0;
  391. tab0 = tab1;
  392. tab1 = tab2;
  393. tab2 = tab3;
  394. tab3 = tab;
  395. size--;
  396. sp++;
  397. }
  398. else if (off == 2) {
  399. *dp++ = tab0[sp[0]];
  400. *dp++ = tab1[sp[1]];
  401. tab = tab0;
  402. tab0 = tab2;
  403. tab2 = tab;
  404. tab = tab1;
  405. tab1 = tab3;
  406. tab3 = tab;
  407. size -= 2;
  408. sp += 2;
  409. }
  410. else if (off == 3) {
  411. *dp++ = tab0[sp[0]];
  412. *dp++ = tab1[sp[1]];
  413. *dp++ = tab2[sp[2]];
  414. tab = tab3;
  415. tab3 = tab2;
  416. tab2 = tab1;
  417. tab1 = tab0;
  418. tab0 = tab;
  419. size -= 3;
  420. sp += 3;
  421. }
  422. sa = (mlib_u32 *) sp;
  423. s0 = sa[0];
  424. sa++;
  425. #ifdef __SUNPRO_C
  426. #pragma pipeloop(0)
  427. #endif /* __SUNPRO_C */
  428. for (i = 0; i < size - 7; i += 4, dp += 4, sa++) {
  429. READ_U8_D64(tab0, tab1, tab2, tab3);
  430. s0 = sa[0];
  431. dp[0] = t0;
  432. dp[1] = t1;
  433. dp[2] = t2;
  434. dp[3] = t3;
  435. }
  436. READ_U8_D64(tab0, tab1, tab2, tab3);
  437. dp[0] = t0;
  438. dp[1] = t1;
  439. dp[2] = t2;
  440. dp[3] = t3;
  441. dp += 4;
  442. sp = (mlib_u8 *) sa;
  443. i += 4;
  444. if (i < size) {
  445. *dp++ = tab0[(*sp)];
  446. i++;
  447. sp++;
  448. }
  449. if (i < size) {
  450. *dp++ = tab1[(*sp)];
  451. i++;
  452. sp++;
  453. }
  454. if (i < size) {
  455. *dp = tab2[(*sp)];
  456. }
  457. }
  458. }
  459. }
  460. /***************************************************************/
  461. void mlib_ImageLookUp_S16_D64(const mlib_s16 *src,
  462. mlib_s32 slb,
  463. mlib_d64 *dst,
  464. mlib_s32 dlb,
  465. mlib_s32 xsize,
  466. mlib_s32 ysize,
  467. mlib_s32 csize,
  468. const mlib_d64 **table)
  469. {
  470. const mlib_d64 *table_base[4];
  471. mlib_s32 c;
  472. for (c = 0; c < csize; c++) {
  473. table_base[c] = &table[c][32768];
  474. }
  475. MLIB_C_IMAGELOOKUP(mlib_d64, mlib_s16, table_base);
  476. }
  477. /***************************************************************/
  478. void mlib_ImageLookUp_U16_D64(const mlib_u16 *src,
  479. mlib_s32 slb,
  480. mlib_d64 *dst,
  481. mlib_s32 dlb,
  482. mlib_s32 xsize,
  483. mlib_s32 ysize,
  484. mlib_s32 csize,
  485. const mlib_d64 **table)
  486. {
  487. const mlib_d64 *table_base[4];
  488. mlib_s32 c;
  489. for (c = 0; c < csize; c++) {
  490. table_base[c] = &table[c][0];
  491. }
  492. MLIB_C_IMAGELOOKUP(mlib_d64, mlib_u16, table_base);
  493. }
  494. /***************************************************************/
  495. void mlib_ImageLookUp_S32_D64(const mlib_s32 *src,
  496. mlib_s32 slb,
  497. mlib_d64 *dst,
  498. mlib_s32 dlb,
  499. mlib_s32 xsize,
  500. mlib_s32 ysize,
  501. mlib_s32 csize,
  502. const mlib_d64 **table)
  503. {
  504. const mlib_d64 *table_base[4];
  505. mlib_u32 shift = TABLE_SHIFT_S32;
  506. mlib_s32 c;
  507. for (c = 0; c < csize; c++) {
  508. table_base[c] = &table[c][shift];
  509. }
  510. MLIB_C_IMAGELOOKUP(mlib_d64, mlib_s32, table_base);
  511. }
  512. /***************************************************************/
  513. void mlib_ImageLookUpSI_U8_D64(const mlib_u8 *src,
  514. mlib_s32 slb,
  515. mlib_d64 *dst,
  516. mlib_s32 dlb,
  517. mlib_s32 xsize,
  518. mlib_s32 ysize,
  519. mlib_s32 csize,
  520. const mlib_d64 **table)
  521. {
  522. if (xsize < 7) {
  523. MLIB_C_IMAGELOOKUPSI(mlib_d64, mlib_u8, table);
  524. }
  525. else if (csize == 2) {
  526. mlib_s32 i, j;
  527. for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
  528. mlib_u32 *sa;
  529. mlib_d64 *tab0 = (mlib_d64 *) table[0];
  530. mlib_d64 *tab1 = (mlib_d64 *) table[1];
  531. mlib_u32 s0;
  532. mlib_d64 t0, t1, t2, t3;
  533. mlib_s32 off;
  534. mlib_s32 size = xsize;
  535. mlib_d64 *dp = (mlib_d64 *) dst;
  536. mlib_u8 *sp = (void *)src;
  537. off = (mlib_s32) ((4 - ((mlib_addr) src & 3)) & 3);
  538. for (i = 0; i < off; i++, sp++) {
  539. *dp++ = tab0[sp[0]];
  540. *dp++ = tab1[sp[0]];
  541. size--;
  542. }
  543. sa = (mlib_u32 *) sp;
  544. s0 = sa[0];
  545. sa++;
  546. #ifdef __SUNPRO_C
  547. #pragma pipeloop(0)
  548. #endif /* __SUNPRO_C */
  549. for (i = 0; i < size - 7; i += 4, dp += 8, sa++) {
  550. #ifdef _LITTLE_ENDIAN
  551. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
  552. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
  553. t2 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 5) & 0x7F8));
  554. t3 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
  555. #else
  556. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 21) & 0x7F8));
  557. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
  558. t2 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
  559. t3 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
  560. #endif /* _LITTLE_ENDIAN */
  561. dp[0] = t0;
  562. dp[1] = t1;
  563. dp[2] = t2;
  564. dp[3] = t3;
  565. #ifdef _LITTLE_ENDIAN
  566. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
  567. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
  568. t2 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 21) & 0x7F8));
  569. t3 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
  570. #else
  571. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 5) & 0x7F8));
  572. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
  573. t2 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
  574. t3 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
  575. #endif /* _LITTLE_ENDIAN */
  576. s0 = sa[0];
  577. dp[4] = t0;
  578. dp[5] = t1;
  579. dp[6] = t2;
  580. dp[7] = t3;
  581. }
  582. #ifdef _LITTLE_ENDIAN
  583. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
  584. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
  585. t2 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 5) & 0x7F8));
  586. t3 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
  587. #else
  588. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 21) & 0x7F8));
  589. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
  590. t2 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
  591. t3 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
  592. #endif /* _LITTLE_ENDIAN */
  593. dp[0] = t0;
  594. dp[1] = t1;
  595. dp[2] = t2;
  596. dp[3] = t3;
  597. #ifdef _LITTLE_ENDIAN
  598. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
  599. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
  600. t2 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 21) & 0x7F8));
  601. t3 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
  602. #else
  603. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 5) & 0x7F8));
  604. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
  605. t2 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
  606. t3 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
  607. #endif /* _LITTLE_ENDIAN */
  608. dp[4] = t0;
  609. dp[5] = t1;
  610. dp[6] = t2;
  611. dp[7] = t3;
  612. dp += 8;
  613. sp = (mlib_u8 *) sa;
  614. i += 4;
  615. for (; i < size; i++, sp++) {
  616. *dp++ = tab0[sp[0]];
  617. *dp++ = tab1[sp[0]];
  618. }
  619. }
  620. }
  621. else if (csize == 3) {
  622. mlib_s32 i, j;
  623. for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
  624. mlib_u32 *sa;
  625. mlib_d64 *tab0 = (mlib_d64 *) table[0];
  626. mlib_d64 *tab1 = (mlib_d64 *) table[1];
  627. mlib_d64 *tab2 = (mlib_d64 *) table[2];
  628. mlib_u32 s0;
  629. mlib_d64 t0, t1, t2, t3, t4, t5;
  630. mlib_s32 off;
  631. mlib_s32 size = xsize;
  632. mlib_d64 *dp = (mlib_d64 *) dst;
  633. mlib_u8 *sp = (void *)src;
  634. off = (mlib_s32) ((4 - ((mlib_addr) src & 3)) & 3);
  635. for (i = 0; i < off; i++, sp++) {
  636. *dp++ = tab0[sp[0]];
  637. *dp++ = tab1[sp[0]];
  638. *dp++ = tab2[sp[0]];
  639. size--;
  640. }
  641. sa = (mlib_u32 *) sp;
  642. s0 = sa[0];
  643. sa++;
  644. #ifdef __SUNPRO_C
  645. #pragma pipeloop(0)
  646. #endif /* __SUNPRO_C */
  647. for (i = 0; i < size - 7; i += 4, dp += 12, sa++) {
  648. #ifdef _LITTLE_ENDIAN
  649. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
  650. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
  651. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 << 3) & 0x7F8));
  652. t3 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 5) & 0x7F8));
  653. t4 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
  654. t5 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 5) & 0x7F8));
  655. #else
  656. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 21) & 0x7F8));
  657. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
  658. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 21) & 0x7F8));
  659. t3 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
  660. t4 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
  661. t5 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 13) & 0x7F8));
  662. #endif /* _LITTLE_ENDIAN */
  663. dp[0] = t0;
  664. dp[1] = t1;
  665. dp[2] = t2;
  666. dp[3] = t3;
  667. dp[4] = t4;
  668. dp[5] = t5;
  669. #ifdef _LITTLE_ENDIAN
  670. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
  671. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
  672. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 13) & 0x7F8));
  673. t3 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 21) & 0x7F8));
  674. t4 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
  675. t5 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 21) & 0x7F8));
  676. #else
  677. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 5) & 0x7F8));
  678. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
  679. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 5) & 0x7F8));
  680. t3 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
  681. t4 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
  682. t5 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 << 3) & 0x7F8));
  683. #endif /* _LITTLE_ENDIAN */
  684. s0 = sa[0];
  685. dp[6] = t0;
  686. dp[7] = t1;
  687. dp[8] = t2;
  688. dp[9] = t3;
  689. dp[10] = t4;
  690. dp[11] = t5;
  691. }
  692. #ifdef _LITTLE_ENDIAN
  693. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
  694. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
  695. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 << 3) & 0x7F8));
  696. t3 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 5) & 0x7F8));
  697. t4 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
  698. t5 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 5) & 0x7F8));
  699. #else
  700. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 21) & 0x7F8));
  701. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
  702. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 21) & 0x7F8));
  703. t3 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
  704. t4 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
  705. t5 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 13) & 0x7F8));
  706. #endif /* _LITTLE_ENDIAN */
  707. dp[0] = t0;
  708. dp[1] = t1;
  709. dp[2] = t2;
  710. dp[3] = t3;
  711. dp[4] = t4;
  712. dp[5] = t5;
  713. #ifdef _LITTLE_ENDIAN
  714. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
  715. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
  716. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 13) & 0x7F8));
  717. t3 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 21) & 0x7F8));
  718. t4 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
  719. t5 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 21) & 0x7F8));
  720. #else
  721. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 5) & 0x7F8));
  722. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
  723. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 5) & 0x7F8));
  724. t3 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
  725. t4 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
  726. t5 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 << 3) & 0x7F8));
  727. #endif /* _LITTLE_ENDIAN */
  728. dp[6] = t0;
  729. dp[7] = t1;
  730. dp[8] = t2;
  731. dp[9] = t3;
  732. dp[10] = t4;
  733. dp[11] = t5;
  734. dp += 12;
  735. sp = (mlib_u8 *) sa;
  736. i += 4;
  737. for (; i < size; i++, sp++) {
  738. *dp++ = tab0[sp[0]];
  739. *dp++ = tab1[sp[0]];
  740. *dp++ = tab2[sp[0]];
  741. }
  742. }
  743. }
  744. else if (csize == 4) {
  745. mlib_s32 i, j;
  746. for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
  747. mlib_u32 *sa;
  748. mlib_d64 *tab0 = (mlib_d64 *) table[0];
  749. mlib_d64 *tab1 = (mlib_d64 *) table[1];
  750. mlib_d64 *tab2 = (mlib_d64 *) table[2];
  751. mlib_d64 *tab3 = (mlib_d64 *) table[3];
  752. mlib_u32 s0;
  753. mlib_d64 t0, t1, t2, t3;
  754. mlib_s32 off;
  755. mlib_s32 size = xsize;
  756. mlib_d64 *dp = (mlib_d64 *) dst;
  757. mlib_u8 *sp = (void *)src;
  758. off = (mlib_s32) ((4 - ((mlib_addr) src & 3)) & 3);
  759. for (i = 0; i < off; i++, sp++) {
  760. *dp++ = tab0[sp[0]];
  761. *dp++ = tab1[sp[0]];
  762. *dp++ = tab2[sp[0]];
  763. *dp++ = tab3[sp[0]];
  764. size--;
  765. }
  766. sa = (mlib_u32 *) sp;
  767. s0 = sa[0];
  768. sa++;
  769. #ifdef __SUNPRO_C
  770. #pragma pipeloop(0)
  771. #endif /* __SUNPRO_C */
  772. for (i = 0; i < size - 7; i += 4, dp += 16, sa++) {
  773. #ifdef _LITTLE_ENDIAN
  774. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
  775. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
  776. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 << 3) & 0x7F8));
  777. t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 << 3) & 0x7F8));
  778. #else
  779. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 21) & 0x7F8));
  780. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
  781. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 21) & 0x7F8));
  782. t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 21) & 0x7F8));
  783. #endif /* _LITTLE_ENDIAN */
  784. dp[0] = t0;
  785. dp[1] = t1;
  786. dp[2] = t2;
  787. dp[3] = t3;
  788. #ifdef _LITTLE_ENDIAN
  789. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 5) & 0x7F8));
  790. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
  791. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 5) & 0x7F8));
  792. t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 5) & 0x7F8));
  793. #else
  794. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
  795. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
  796. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 13) & 0x7F8));
  797. t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 13) & 0x7F8));
  798. #endif /* _LITTLE_ENDIAN */
  799. dp[4] = t0;
  800. dp[5] = t1;
  801. dp[6] = t2;
  802. dp[7] = t3;
  803. #ifdef _LITTLE_ENDIAN
  804. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
  805. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
  806. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 13) & 0x7F8));
  807. t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 13) & 0x7F8));
  808. #else
  809. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 5) & 0x7F8));
  810. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
  811. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 5) & 0x7F8));
  812. t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 5) & 0x7F8));
  813. #endif /* _LITTLE_ENDIAN */
  814. dp[8] = t0;
  815. dp[9] = t1;
  816. dp[10] = t2;
  817. dp[11] = t3;
  818. #ifdef _LITTLE_ENDIAN
  819. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 21) & 0x7F8));
  820. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
  821. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 21) & 0x7F8));
  822. t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 21) & 0x7F8));
  823. #else
  824. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
  825. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
  826. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 << 3) & 0x7F8));
  827. t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 << 3) & 0x7F8));
  828. #endif /* _LITTLE_ENDIAN */
  829. s0 = sa[0];
  830. dp[12] = t0;
  831. dp[13] = t1;
  832. dp[14] = t2;
  833. dp[15] = t3;
  834. }
  835. #ifdef _LITTLE_ENDIAN
  836. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
  837. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
  838. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 << 3) & 0x7F8));
  839. t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 << 3) & 0x7F8));
  840. #else
  841. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 21) & 0x7F8));
  842. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
  843. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 21) & 0x7F8));
  844. t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 21) & 0x7F8));
  845. #endif /* _LITTLE_ENDIAN */
  846. dp[0] = t0;
  847. dp[1] = t1;
  848. dp[2] = t2;
  849. dp[3] = t3;
  850. #ifdef _LITTLE_ENDIAN
  851. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 5) & 0x7F8));
  852. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
  853. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 5) & 0x7F8));
  854. t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 5) & 0x7F8));
  855. #else
  856. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
  857. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
  858. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 13) & 0x7F8));
  859. t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 13) & 0x7F8));
  860. #endif /* _LITTLE_ENDIAN */
  861. dp[4] = t0;
  862. dp[5] = t1;
  863. dp[6] = t2;
  864. dp[7] = t3;
  865. #ifdef _LITTLE_ENDIAN
  866. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
  867. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
  868. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 13) & 0x7F8));
  869. t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 13) & 0x7F8));
  870. #else
  871. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 5) & 0x7F8));
  872. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
  873. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 5) & 0x7F8));
  874. t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 5) & 0x7F8));
  875. #endif /* _LITTLE_ENDIAN */
  876. dp[8] = t0;
  877. dp[9] = t1;
  878. dp[10] = t2;
  879. dp[11] = t3;
  880. #ifdef _LITTLE_ENDIAN
  881. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 21) & 0x7F8));
  882. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
  883. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 21) & 0x7F8));
  884. t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 21) & 0x7F8));
  885. #else
  886. t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
  887. t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
  888. t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 << 3) & 0x7F8));
  889. t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 << 3) & 0x7F8));
  890. #endif /* _LITTLE_ENDIAN */
  891. dp[12] = t0;
  892. dp[13] = t1;
  893. dp[14] = t2;
  894. dp[15] = t3;
  895. dp += 16;
  896. sp = (mlib_u8 *) sa;
  897. i += 4;
  898. for (; i < size; i++, sp++) {
  899. *dp++ = tab0[sp[0]];
  900. *dp++ = tab1[sp[0]];
  901. *dp++ = tab2[sp[0]];
  902. *dp++ = tab3[sp[0]];
  903. }
  904. }
  905. }
  906. }
  907. /***************************************************************/
  908. void mlib_ImageLookUpSI_S16_D64(const mlib_s16 *src,
  909. mlib_s32 slb,
  910. mlib_d64 *dst,
  911. mlib_s32 dlb,
  912. mlib_s32 xsize,
  913. mlib_s32 ysize,
  914. mlib_s32 csize,
  915. const mlib_d64 **table)
  916. {
  917. const mlib_d64 *table_base[4];
  918. mlib_s32 c;
  919. for (c = 0; c < csize; c++) {
  920. table_base[c] = &table[c][32768];
  921. }
  922. MLIB_C_IMAGELOOKUPSI(mlib_d64, mlib_s16, table_base);
  923. }
  924. /***************************************************************/
  925. void mlib_ImageLookUpSI_U16_D64(const mlib_u16 *src,
  926. mlib_s32 slb,
  927. mlib_d64 *dst,
  928. mlib_s32 dlb,
  929. mlib_s32 xsize,
  930. mlib_s32 ysize,
  931. mlib_s32 csize,
  932. const mlib_d64 **table)
  933. {
  934. const mlib_d64 *table_base[4];
  935. mlib_s32 c;
  936. for (c = 0; c < csize; c++) {
  937. table_base[c] = &table[c][0];
  938. }
  939. MLIB_C_IMAGELOOKUPSI(mlib_d64, mlib_u16, table_base);
  940. }
  941. /***************************************************************/
  942. void mlib_ImageLookUpSI_S32_D64(const mlib_s32 *src,
  943. mlib_s32 slb,
  944. mlib_d64 *dst,
  945. mlib_s32 dlb,
  946. mlib_s32 xsize,
  947. mlib_s32 ysize,
  948. mlib_s32 csize,
  949. const mlib_d64 **table)
  950. {
  951. const mlib_d64 *table_base[4];
  952. mlib_u32 shift = TABLE_SHIFT_S32;
  953. mlib_s32 c;
  954. for (c = 0; c < csize; c++) {
  955. table_base[c] = &table[c][shift];
  956. }
  957. MLIB_C_IMAGELOOKUPSI(mlib_d64, mlib_s32, table_base);
  958. }
  959. /***************************************************************/