/java-1.7.0-openjdk/openjdk/jdk/src/share/native/sun/awt/medialib/mlib_c_ImageLookUp_f.c
C | 3878 lines | 3360 code | 449 blank | 69 comment | 381 complexity | 60e31c5e1a8b51c2ddcc38adb52d5ff1 MD5 | raw file
Possible License(s): GPL-2.0, BSD-3-Clause-No-Nuclear-License-2014, LGPL-3.0, LGPL-2.0
Large files files are truncated, but you can click here to view the full file
- /*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
- #include "mlib_image.h"
- #include "mlib_ImageLookUp.h"
- #include "mlib_c_ImageLookUp.h"
- /***************************************************************/
- #define MLIB_C_IMAGELOOKUP(DTYPE, STYPE, TABLE) \
- { \
- mlib_s32 i, j, k; \
- \
- if (xsize < 2) { \
- for(j = 0; j < ysize; j++, dst += dlb, src += slb){ \
- for(k = 0; k < csize; k++) { \
- DTYPE *da = dst + k; \
- const STYPE *sa = src + k; \
- DTYPE *tab = (DTYPE*) TABLE[k]; \
- \
- for(i = 0; i < xsize; i++, da += csize, sa += csize) \
- *da=tab[*sa]; \
- } \
- } \
- } else { \
- for(j = 0; j < ysize; j++, dst += dlb, src += slb) { \
- for(k = 0; k < csize; k++) { \
- DTYPE *da = dst + k; \
- const STYPE *sa = src + k; \
- DTYPE *tab = (DTYPE*) TABLE[k]; \
- mlib_s32 s0, t0, s1, t1; \
- \
- s0 = (mlib_s32)sa[0]; \
- s1 = (mlib_s32)sa[csize]; \
- sa += 2*csize; \
- \
- for(i = 0; i < xsize - 3; i+=2, da += 2*csize, sa += 2*csize) { \
- t0 = (mlib_s32)tab[s0]; \
- t1 = (mlib_s32)tab[s1]; \
- s0 = (mlib_s32)sa[0]; \
- s1 = (mlib_s32)sa[csize]; \
- da[0] = (DTYPE)t0; \
- da[csize] = (DTYPE)t1; \
- } \
- t0 = (mlib_s32)tab[s0]; \
- t1 = (mlib_s32)tab[s1]; \
- da[0] = (DTYPE)t0; \
- da[csize] = (DTYPE)t1; \
- if (xsize & 1) da[2*csize] = tab[sa[0]]; \
- } \
- } \
- } \
- }
- /***************************************************************/
- #define MLIB_C_IMAGELOOKUPSI(DTYPE, STYPE, TABLE) \
- { \
- mlib_s32 i, j, k; \
- \
- if (xsize < 2) { \
- for(j = 0; j < ysize; j++, dst += dlb, src += slb){ \
- for(k = 0; k < csize; k++) { \
- DTYPE *da = dst + k; \
- const STYPE *sa = (void *)src; \
- DTYPE *tab = (DTYPE*) TABLE[k]; \
- \
- for(i = 0; i < xsize; i++, da += csize, sa ++) \
- *da=tab[*sa]; \
- } \
- } \
- } else { \
- for(j = 0; j < ysize; j++, dst += dlb, src += slb) { \
- for(k = 0; k < csize; k++) { \
- DTYPE *da = dst + k; \
- const STYPE *sa = (void *)src; \
- DTYPE *tab = (DTYPE*) TABLE[k]; \
- mlib_s32 s0, t0, s1, t1; \
- \
- s0 = (mlib_s32)sa[0]; \
- s1 = (mlib_s32)sa[1]; \
- sa += 2; \
- \
- for(i = 0; i < xsize - 3; i+=2, da += 2*csize, sa += 2) { \
- t0 = (mlib_s32)tab[s0]; \
- t1 = (mlib_s32)tab[s1]; \
- s0 = (mlib_s32)sa[0]; \
- s1 = (mlib_s32)sa[1]; \
- da[0] = (DTYPE)t0; \
- da[csize] = (DTYPE)t1; \
- } \
- t0 = (mlib_s32)tab[s0]; \
- t1 = (mlib_s32)tab[s1]; \
- da[0] = (DTYPE)t0; \
- da[csize] = (DTYPE)t1; \
- if (xsize & 1) da[2*csize] = tab[sa[0]]; \
- } \
- } \
- } \
- }
- #ifdef _LITTLE_ENDIAN
- /***************************************************************/
- #define READ_U8_U8_ALIGN(table0, table1, table2, table3) \
- t3 = table0[s0 & 0xFF]; \
- t2 = table1[s0>>8]; \
- t1 = table2[s1 & 0xFF]; \
- t0 = table3[s1>>8]
- /***************************************************************/
- #define READ_U8_U8_NOTALIGN(table0, table1, table2, table3) \
- t3 = table0[s0 >> 8]; \
- t2 = table1[s1 & 0xFF]; \
- t1 = table2[s1 >> 8]; \
- t0 = table3[s2 & 0xFF]
- /***************************************************************/
- #define READ_U8_S16_ALIGN(table0, table1, table2, table3) \
- t1 = *(mlib_u16*)((mlib_u8*)table0 + ((s0 << 1) & 0x1FE)); \
- t0 = *(mlib_u16*)((mlib_u8*)table1 + ((s0 >> 7) & 0x1FE)); \
- t3 = *(mlib_u16*)((mlib_u8*)table2 + ((s0 >> 15) & 0x1FE)); \
- t2 = *(mlib_u16*)((mlib_u8*)table3 + ((s0 >> 23) & 0x1FE))
- /***************************************************************/
- #define READ_U8_S16_NOTALIGN(table0, table1, table2, table3) \
- t1 = *(mlib_u16*)((mlib_u8*)table0 + ((s0 >> 7) & 0x1FE)); \
- t0 = *(mlib_u16*)((mlib_u8*)table1 + ((s0 >> 15) & 0x1FE)); \
- t3 = *(mlib_u16*)((mlib_u8*)table2 + ((s0 >> 23) & 0x1FE)); \
- t2 = *(mlib_u16*)((mlib_u8*)table3 + ((s1 << 1) & 0x1FE))
- /***************************************************************/
- #define ADD_READ_U8_S16_NOTALIGN(table0, table1, table2) \
- t1 = *(mlib_u16*)((mlib_u8*)table0 + ((s1 >> 7) & 0x1FE)); \
- t0 = *(mlib_u16*)((mlib_u8*)table1 + ((s1 >> 15) & 0x1FE)); \
- t2 = *(mlib_u16*)((mlib_u8*)table2 + ((s1 >> 23) & 0x1FE))
- /***************************************************************/
- #define READ_U8_S32(table0, table1, table2, table3) \
- t0 = *(mlib_u32*)((mlib_u8*)table0 + ((s0 << 2) & 0x3FC)); \
- t1 = *(mlib_u32*)((mlib_u8*)table1 + ((s0 >> 6) & 0x3FC)); \
- t2 = *(mlib_u32*)((mlib_u8*)table2 + ((s0 >> 14) & 0x3FC)); \
- t3 = *(mlib_u32*)((mlib_u8*)table3 + ((s0 >> 22) & 0x3FC))
- #else /* _LITTLE_ENDIAN */
- /***********/
- #define READ_U8_U8_ALIGN(table0, table1, table2, table3) \
- t0 = table0[s0>>8]; \
- t1 = table1[s0 & 0xFF]; \
- t2 = table2[s1>>8]; \
- t3 = table3[s1 & 0xFF]
- /***************************************************************/
- #define READ_U8_U8_NOTALIGN(table0, table1, table2, table3) \
- t0 = table0[s0 & 0xFF]; \
- t1 = table1[s1 >> 8]; \
- t2 = table2[s1 & 0xFF]; \
- t3 = table3[s2 >> 8]
- /***************************************************************/
- #define READ_U8_S16_ALIGN(table0, table1, table2, table3) \
- t0 = *(mlib_u16*)((mlib_u8*)table0 + ((s0 >> 23) & 0x1FE)); \
- t1 = *(mlib_u16*)((mlib_u8*)table1 + ((s0 >> 15) & 0x1FE)); \
- t2 = *(mlib_u16*)((mlib_u8*)table2 + ((s0 >> 7) & 0x1FE)); \
- t3 = *(mlib_u16*)((mlib_u8*)table3 + ((s0 << 1) & 0x1FE))
- /***************************************************************/
- #define READ_U8_S16_NOTALIGN(table0, table1, table2, table3) \
- t0 = *(mlib_u16*)((mlib_u8*)table0 + ((s0 >> 15) & 0x1FE)); \
- t1 = *(mlib_u16*)((mlib_u8*)table1 + ((s0 >> 7) & 0x1FE)); \
- t2 = *(mlib_u16*)((mlib_u8*)table2 + ((s0 << 1) & 0x1FE)); \
- t3 = *(mlib_u16*)((mlib_u8*)table3 + ((s1 >> 23) & 0x1FE))
- /***************************************************************/
- #define ADD_READ_U8_S16_NOTALIGN(table0, table1, table2) \
- t0 = *(mlib_u16*)((mlib_u8*)table0 + ((s1 >> 15) & 0x1FE)); \
- t1 = *(mlib_u16*)((mlib_u8*)table1 + ((s1 >> 7) & 0x1FE)); \
- t2 = *(mlib_u16*)((mlib_u8*)table2 + ((s1 << 1) & 0x1FE))
- /***************************************************************/
- #define READ_U8_S32(table0, table1, table2, table3) \
- t0 = *(mlib_u32*)((mlib_u8*)table0 + ((s0 >> 22) & 0x3FC)); \
- t1 = *(mlib_u32*)((mlib_u8*)table1 + ((s0 >> 14) & 0x3FC)); \
- t2 = *(mlib_u32*)((mlib_u8*)table2 + ((s0 >> 6) & 0x3FC)); \
- t3 = *(mlib_u32*)((mlib_u8*)table3 + ((s0 << 2) & 0x3FC))
- #endif /* _LITTLE_ENDIAN */
- /***************************************************************/
- void mlib_c_ImageLookUp_U8_U8(const mlib_u8 *src,
- mlib_s32 slb,
- mlib_u8 *dst,
- mlib_s32 dlb,
- mlib_s32 xsize,
- mlib_s32 ysize,
- mlib_s32 csize,
- const mlib_u8 **table)
- {
- if (xsize * csize < 9) {
- MLIB_C_IMAGELOOKUP(mlib_u8, mlib_u8, table);
- }
- else if (csize == 1) {
- mlib_s32 i, j;
- for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
- mlib_u32 *da;
- mlib_u16 *sa;
- mlib_u8 *tab = (mlib_u8 *) table[0];
- mlib_u32 s0, s1, s2, t0, t1, t2, t3, t;
- mlib_s32 off;
- mlib_s32 size = xsize;
- mlib_u8 *dp = dst, *sp = (void *)src;
- off = (mlib_s32) ((4 - ((mlib_addr) dst & 3)) & 3);
- for (i = 0; i < off; i++, sp++) {
- *dp++ = tab[sp[0]];
- size--;
- }
- da = (mlib_u32 *) dp;
- if (((mlib_addr) sp & 1) == 0) {
- sa = (mlib_u16 *) sp;
- s0 = sa[0];
- s1 = sa[1];
- sa += 2;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 7; i += 4, da++, sa += 2) {
- READ_U8_U8_ALIGN(tab, tab, tab, tab);
- t = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
- s0 = sa[0];
- s1 = sa[1];
- da[0] = t;
- }
- READ_U8_U8_ALIGN(tab, tab, tab, tab);
- t = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
- da[0] = t;
- da++;
- dp = (mlib_u8 *) da;
- sp = (mlib_u8 *) sa;
- i += 4;
- for (; i < size; i++, dp++, sp++)
- dp[0] = tab[sp[0]];
- }
- else {
- sa = (mlib_u16 *) (sp - 1);
- s0 = sa[0];
- s1 = sa[1];
- s2 = sa[2];
- sa += 3;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 8; i += 4, da++, sa += 2) {
- READ_U8_U8_NOTALIGN(tab, tab, tab, tab);
- t = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
- s0 = s2;
- s1 = sa[0];
- s2 = sa[1];
- da[0] = t;
- }
- READ_U8_U8_NOTALIGN(tab, tab, tab, tab);
- t = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
- da[0] = t;
- da++;
- dp = (mlib_u8 *) da;
- #ifdef _LITTLE_ENDIAN
- *dp++ = tab[s2 >> 8];
- #else
- *dp++ = tab[s2 & 0xFF];
- #endif /* _LITTLE_ENDIAN */
- sp = (mlib_u8 *) sa;
- i += 5;
- for (; i < size; i++, dp++, sp++)
- dp[0] = tab[sp[0]];
- }
- }
- }
- else if (csize == 2) {
- mlib_s32 i, j;
- for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
- mlib_u32 *da;
- mlib_u16 *sa;
- mlib_u8 *tab0 = (mlib_u8 *) table[0];
- mlib_u8 *tab1 = (mlib_u8 *) table[1];
- mlib_u8 *tab;
- mlib_u32 s0, s1, s2, t0, t1, t2, t3, t;
- mlib_s32 off;
- mlib_s32 size = xsize * 2;
- mlib_u8 *dp = dst, *sp = (void *)src;
- off = (mlib_s32) ((4 - ((mlib_addr) dst & 3)) & 3);
- for (i = 0; i < off - 1; i += 2, sp += 2) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- size -= 2;
- }
- if ((off & 1) != 0) {
- *dp++ = tab0[sp[0]];
- size--;
- sp++;
- tab = tab0;
- tab0 = tab1;
- tab1 = tab;
- }
- da = (mlib_u32 *) dp;
- if (((mlib_addr) sp & 1) == 0) {
- sa = (mlib_u16 *) sp;
- s0 = sa[0];
- s1 = sa[1];
- sa += 2;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 7; i += 4, da++, sa += 2) {
- READ_U8_U8_ALIGN(tab0, tab1, tab0, tab1);
- t = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
- s0 = sa[0];
- s1 = sa[1];
- da[0] = t;
- }
- READ_U8_U8_ALIGN(tab0, tab1, tab0, tab1);
- t = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
- da[0] = t;
- da++;
- dp = (mlib_u8 *) da;
- sp = (mlib_u8 *) sa;
- i += 4;
- for (; i < size - 1; i += 2, sp += 2) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- }
- if (i < size)
- *dp = tab0[(*sp)];
- }
- else {
- sa = (mlib_u16 *) (sp - 1);
- s0 = sa[0];
- s1 = sa[1];
- s2 = sa[2];
- sa += 3;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 8; i += 4, da++, sa += 2) {
- READ_U8_U8_NOTALIGN(tab0, tab1, tab0, tab1);
- t = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
- s0 = s2;
- s1 = sa[0];
- s2 = sa[1];
- da[0] = t;
- }
- READ_U8_U8_NOTALIGN(tab0, tab1, tab0, tab1);
- t = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
- da[0] = t;
- da++;
- dp = (mlib_u8 *) da;
- #ifdef _LITTLE_ENDIAN
- *dp++ = tab0[s2 >> 8];
- #else
- *dp++ = tab0[s2 & 0xFF];
- #endif /* _LITTLE_ENDIAN */
- sp = (mlib_u8 *) sa;
- i += 5;
- for (; i < size - 1; i += 2, sp += 2) {
- *dp++ = tab1[sp[0]];
- *dp++ = tab0[sp[1]];
- }
- if (i < size)
- *dp = tab1[(*sp)];
- }
- }
- }
- else if (csize == 3) {
- mlib_s32 i, j;
- for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
- mlib_u32 *da;
- mlib_u16 *sa;
- mlib_u8 *tab0 = (mlib_u8 *) table[0];
- mlib_u8 *tab1 = (mlib_u8 *) table[1];
- mlib_u8 *tab2 = (mlib_u8 *) table[2];
- mlib_u8 *tab;
- mlib_u32 s0, s1, s2, t0, t1, t2, t3, t;
- mlib_s32 off;
- mlib_s32 size = xsize * 3;
- mlib_u8 *dp = dst, *sp = (void *)src;
- off = (mlib_s32) ((4 - ((mlib_addr) dst & 3)) & 3);
- if (off == 1) {
- *dp++ = tab0[sp[0]];
- tab = tab0;
- tab0 = tab1;
- tab1 = tab2;
- tab2 = tab;
- size--;
- sp++;
- }
- else if (off == 2) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- tab = tab2;
- tab2 = tab1;
- tab1 = tab0;
- tab0 = tab;
- size -= 2;
- sp += 2;
- }
- else if (off == 3) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- *dp++ = tab2[sp[2]];
- size -= 3;
- sp += 3;
- }
- da = (mlib_u32 *) dp;
- if (((mlib_addr) sp & 1) == 0) {
- sa = (mlib_u16 *) sp;
- s0 = sa[0];
- s1 = sa[1];
- sa += 2;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 7; i += 4, da++, sa += 2) {
- READ_U8_U8_ALIGN(tab0, tab1, tab2, tab0);
- t = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
- tab = tab0;
- tab0 = tab1;
- tab1 = tab2;
- tab2 = tab;
- s0 = sa[0];
- s1 = sa[1];
- da[0] = t;
- }
- READ_U8_U8_ALIGN(tab0, tab1, tab2, tab0);
- t = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
- da[0] = t;
- da++;
- dp = (mlib_u8 *) da;
- sp = (mlib_u8 *) sa;
- i += 4;
- if (i < size) {
- *dp++ = tab1[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp++ = tab2[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp++ = tab0[(*sp)];
- }
- }
- else {
- sa = (mlib_u16 *) (sp - 1);
- s0 = sa[0];
- s1 = sa[1];
- s2 = sa[2];
- sa += 3;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 8; i += 4, da++, sa += 2) {
- READ_U8_U8_NOTALIGN(tab0, tab1, tab2, tab0);
- t = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
- tab = tab0;
- tab0 = tab1;
- tab1 = tab2;
- tab2 = tab;
- s0 = s2;
- s1 = sa[0];
- s2 = sa[1];
- da[0] = t;
- }
- READ_U8_U8_NOTALIGN(tab0, tab1, tab2, tab0);
- t = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
- da[0] = t;
- da++;
- dp = (mlib_u8 *) da;
- #ifdef _LITTLE_ENDIAN
- *dp++ = tab1[s2 >> 8];
- #else
- *dp++ = tab1[s2 & 0xFF];
- #endif /* _LITTLE_ENDIAN */
- sp = (mlib_u8 *) sa;
- i += 5;
- if (i < size) {
- *dp++ = tab2[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp++ = tab0[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp = tab1[(*sp)];
- }
- }
- }
- }
- else if (csize == 4) {
- mlib_s32 i, j;
- for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
- mlib_u32 *da;
- mlib_u16 *sa;
- mlib_u8 *tab0 = (mlib_u8 *) table[0];
- mlib_u8 *tab1 = (mlib_u8 *) table[1];
- mlib_u8 *tab2 = (mlib_u8 *) table[2];
- mlib_u8 *tab3 = (mlib_u8 *) table[3];
- mlib_u8 *tab;
- mlib_u32 s0, s1, s2, t0, t1, t2, t3, t;
- mlib_s32 off;
- mlib_s32 size = xsize * 4;
- mlib_u8 *dp = dst, *sp = (void *)src;
- off = (mlib_s32) ((4 - ((mlib_addr) dst & 3)) & 3);
- if (off == 1) {
- *dp++ = tab0[sp[0]];
- tab = tab0;
- tab0 = tab1;
- tab1 = tab2;
- tab2 = tab3;
- tab3 = tab;
- size--;
- sp++;
- }
- else if (off == 2) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- tab = tab0;
- tab0 = tab2;
- tab2 = tab;
- tab = tab1;
- tab1 = tab3;
- tab3 = tab;
- size -= 2;
- sp += 2;
- }
- else if (off == 3) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- *dp++ = tab2[sp[2]];
- tab = tab3;
- tab3 = tab2;
- tab2 = tab1;
- tab1 = tab0;
- tab0 = tab;
- size -= 3;
- sp += 3;
- }
- da = (mlib_u32 *) dp;
- if (((mlib_addr) sp & 1) == 0) {
- sa = (mlib_u16 *) sp;
- s0 = sa[0];
- s1 = sa[1];
- sa += 2;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 7; i += 4, da++, sa += 2) {
- READ_U8_U8_ALIGN(tab0, tab1, tab2, tab3);
- t = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
- s0 = sa[0];
- s1 = sa[1];
- da[0] = t;
- }
- READ_U8_U8_ALIGN(tab0, tab1, tab2, tab3);
- t = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
- da[0] = t;
- da++;
- dp = (mlib_u8 *) da;
- sp = (mlib_u8 *) sa;
- i += 4;
- if (i < size) {
- *dp++ = tab0[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp++ = tab1[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp = tab2[(*sp)];
- }
- }
- else {
- sa = (mlib_u16 *) (sp - 1);
- s0 = sa[0];
- s1 = sa[1];
- s2 = sa[2];
- sa += 3;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 8; i += 4, da++, sa += 2) {
- READ_U8_U8_NOTALIGN(tab0, tab1, tab2, tab3);
- t = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
- s0 = s2;
- s1 = sa[0];
- s2 = sa[1];
- da[0] = t;
- }
- READ_U8_U8_NOTALIGN(tab0, tab1, tab2, tab3);
- t = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
- da[0] = t;
- da++;
- dp = (mlib_u8 *) da;
- #ifdef _LITTLE_ENDIAN
- *dp++ = tab0[s2 >> 8];
- #else
- *dp++ = tab0[s2 & 0xFF];
- #endif /* _LITTLE_ENDIAN */
- sp = (mlib_u8 *) sa;
- i += 5;
- if (i < size) {
- *dp++ = tab1[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp++ = tab2[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp = tab3[(*sp)];
- }
- }
- }
- }
- }
- /***************************************************************/
- void mlib_c_ImageLookUp_S16_U8(const mlib_s16 *src,
- mlib_s32 slb,
- mlib_u8 *dst,
- mlib_s32 dlb,
- mlib_s32 xsize,
- mlib_s32 ysize,
- mlib_s32 csize,
- const mlib_u8 **table)
- {
- const mlib_u8 *table_base[4];
- mlib_s32 c;
- for (c = 0; c < csize; c++) {
- table_base[c] = &table[c][32768];
- }
- MLIB_C_IMAGELOOKUP(mlib_u8, mlib_s16, table_base);
- }
- /***************************************************************/
- void mlib_c_ImageLookUp_U16_U8(const mlib_u16 *src,
- mlib_s32 slb,
- mlib_u8 *dst,
- mlib_s32 dlb,
- mlib_s32 xsize,
- mlib_s32 ysize,
- mlib_s32 csize,
- const mlib_u8 **table)
- {
- const mlib_u8 *table_base[4];
- mlib_s32 c;
- for (c = 0; c < csize; c++) {
- table_base[c] = &table[c][0];
- }
- MLIB_C_IMAGELOOKUP(mlib_u8, mlib_u16, table_base);
- }
- /***************************************************************/
- void mlib_c_ImageLookUp_S32_U8(const mlib_s32 *src,
- mlib_s32 slb,
- mlib_u8 *dst,
- mlib_s32 dlb,
- mlib_s32 xsize,
- mlib_s32 ysize,
- mlib_s32 csize,
- const mlib_u8 **table)
- {
- const mlib_u8 *table_base[4];
- mlib_s32 c;
- for (c = 0; c < csize; c++) {
- table_base[c] = &table[c][TABLE_SHIFT_S32];
- }
- MLIB_C_IMAGELOOKUP(mlib_u8, mlib_s32, table_base);
- }
- /***************************************************************/
- void mlib_c_ImageLookUp_U8_S16(const mlib_u8 *src,
- mlib_s32 slb,
- mlib_s16 *dst,
- mlib_s32 dlb,
- mlib_s32 xsize,
- mlib_s32 ysize,
- mlib_s32 csize,
- const mlib_s16 **table)
- {
- if (xsize * csize < 12) {
- MLIB_C_IMAGELOOKUP(mlib_s16, mlib_u8, table);
- }
- else if (csize == 1) {
- mlib_s32 i, j;
- for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
- mlib_u32 *sa;
- mlib_u32 *da;
- mlib_u16 *tab = (mlib_u16 *) table[0];
- mlib_u32 s0, s1, t0, t1, t2, t3;
- mlib_u32 res1, res2;
- mlib_s32 off;
- mlib_s32 size = xsize;
- mlib_u16 *dp = (mlib_u16 *) dst;
- mlib_u8 *sp = (void *)src;
- off = (mlib_s32) ((4 - ((mlib_addr) src & 3)) & 3);
- for (i = 0; i < off; i++, sp++) {
- *dp++ = tab[sp[0]];
- size--;
- }
- sa = (mlib_u32 *) sp;
- if (((mlib_addr) dp & 3) == 0) {
- da = (mlib_u32 *) dp;
- s0 = sa[0];
- sa++;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 7; i += 4, da += 2, sa++) {
- READ_U8_S16_ALIGN(tab, tab, tab, tab);
- res1 = (t0 << 16) + t1;
- res2 = (t2 << 16) + t3;
- s0 = sa[0];
- da[0] = res1;
- da[1] = res2;
- }
- READ_U8_S16_ALIGN(tab, tab, tab, tab);
- res1 = (t0 << 16) + t1;
- res2 = (t2 << 16) + t3;
- da[0] = res1;
- da[1] = res2;
- da += 2;
- dp = (mlib_u16 *) da;
- sp = (mlib_u8 *) sa;
- i += 4;
- for (; i < size; i++, dp++, sp++)
- dp[0] = tab[sp[0]];
- }
- else {
- *dp++ = tab[(*sp)];
- size--;
- da = (mlib_u32 *) dp;
- s0 = sa[0];
- s1 = sa[1];
- sa += 2;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 10; i += 4, da += 2, sa++) {
- READ_U8_S16_NOTALIGN(tab, tab, tab, tab);
- s0 = s1;
- res1 = (t0 << 16) + t1;
- res2 = (t2 << 16) + t3;
- s1 = sa[0];
- da[0] = res1;
- da[1] = res2;
- }
- READ_U8_S16_NOTALIGN(tab, tab, tab, tab);
- res1 = (t0 << 16) + t1;
- res2 = (t2 << 16) + t3;
- da[0] = res1;
- da[1] = res2;
- ADD_READ_U8_S16_NOTALIGN(tab, tab, tab);
- res1 = (t0 << 16) + t1;
- da[2] = res1;
- da += 3;
- dp = (mlib_u16 *) da;
- *dp++ = (mlib_u16) t2;
- sp = (mlib_u8 *) sa;
- i += 7;
- for (; i < size; i++, dp++, sp++)
- dp[0] = tab[sp[0]];
- }
- }
- }
- else if (csize == 2) {
- mlib_s32 i, j;
- for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
- mlib_u32 *sa;
- mlib_u32 *da;
- mlib_u16 *tab0 = (mlib_u16 *) table[0];
- mlib_u16 *tab1 = (mlib_u16 *) table[1];
- mlib_u16 *tab;
- mlib_u32 s0, s1, t0, t1, t2, t3;
- mlib_u32 res1, res2;
- mlib_s32 off;
- mlib_s32 size = xsize * 2;
- mlib_u16 *dp = (mlib_u16 *) dst;
- mlib_u8 *sp = (void *)src;
- off = (mlib_s32) ((4 - ((mlib_addr) src & 3)) & 3);
- for (i = 0; i < off - 1; i += 2, sp += 2) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- size -= 2;
- }
- if ((off & 1) != 0) {
- *dp++ = tab0[*sp];
- size--;
- sp++;
- tab = tab0;
- tab0 = tab1;
- tab1 = tab;
- }
- sa = (mlib_u32 *) sp;
- if (((mlib_addr) dp & 3) == 0) {
- da = (mlib_u32 *) dp;
- s0 = sa[0];
- sa++;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 7; i += 4, da += 2, sa++) {
- READ_U8_S16_ALIGN(tab0, tab1, tab0, tab1);
- res1 = (t0 << 16) + t1;
- res2 = (t2 << 16) + t3;
- s0 = sa[0];
- da[0] = res1;
- da[1] = res2;
- }
- READ_U8_S16_ALIGN(tab0, tab1, tab0, tab1);
- res1 = (t0 << 16) + t1;
- res2 = (t2 << 16) + t3;
- da[0] = res1;
- da[1] = res2;
- da += 2;
- dp = (mlib_u16 *) da;
- sp = (mlib_u8 *) sa;
- i += 4;
- for (; i < size - 1; i += 2, sp += 2) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- }
- if (i < size)
- *dp = tab0[(*sp)];
- }
- else {
- *dp++ = tab0[(*sp)];
- size--;
- da = (mlib_u32 *) dp;
- s0 = sa[0];
- s1 = sa[1];
- sa += 2;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 10; i += 4, da += 2, sa++) {
- READ_U8_S16_NOTALIGN(tab1, tab0, tab1, tab0);
- s0 = s1;
- res1 = (t0 << 16) + t1;
- res2 = (t2 << 16) + t3;
- s1 = sa[0];
- da[0] = res1;
- da[1] = res2;
- }
- READ_U8_S16_NOTALIGN(tab1, tab0, tab1, tab0);
- res1 = (t0 << 16) + t1;
- res2 = (t2 << 16) + t3;
- da[0] = res1;
- da[1] = res2;
- ADD_READ_U8_S16_NOTALIGN(tab1, tab0, tab1);
- res1 = (t0 << 16) + t1;
- da[2] = res1;
- da += 3;
- dp = (mlib_u16 *) da;
- *dp++ = (mlib_u16) t2;
- sp = (mlib_u8 *) sa;
- i += 7;
- for (; i < size - 1; i += 2, sp += 2) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- }
- if (i < size)
- *dp = tab0[(*sp)];
- }
- }
- }
- else if (csize == 3) {
- mlib_s32 i, j;
- for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
- mlib_u32 *sa;
- mlib_u32 *da;
- mlib_u16 *tab0 = (mlib_u16 *) table[0];
- mlib_u16 *tab1 = (mlib_u16 *) table[1];
- mlib_u16 *tab2 = (mlib_u16 *) table[2];
- mlib_u16 *tab;
- mlib_u32 s0, s1, t0, t1, t2, t3;
- mlib_u32 res1, res2;
- mlib_s32 off;
- mlib_s32 size = xsize * 3;
- mlib_u16 *dp = (mlib_u16 *) dst;
- mlib_u8 *sp = (void *)src;
- off = (mlib_s32) ((4 - ((mlib_addr) src & 3)) & 3);
- if (off == 1) {
- *dp++ = tab0[(*sp)];
- tab = tab0;
- tab0 = tab1;
- tab1 = tab2;
- tab2 = tab;
- size--;
- sp++;
- }
- else if (off == 2) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- tab = tab2;
- tab2 = tab1;
- tab1 = tab0;
- tab0 = tab;
- size -= 2;
- sp += 2;
- }
- else if (off == 3) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- *dp++ = tab2[sp[2]];
- size -= 3;
- sp += 3;
- }
- sa = (mlib_u32 *) sp;
- if (((mlib_addr) dp & 3) == 0) {
- da = (mlib_u32 *) dp;
- s0 = sa[0];
- sa++;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 7; i += 4, da += 2, sa++) {
- READ_U8_S16_ALIGN(tab0, tab1, tab2, tab0);
- res1 = (t0 << 16) + t1;
- res2 = (t2 << 16) + t3;
- tab = tab0;
- tab0 = tab1;
- tab1 = tab2;
- tab2 = tab;
- s0 = sa[0];
- da[0] = res1;
- da[1] = res2;
- }
- READ_U8_S16_ALIGN(tab0, tab1, tab2, tab0);
- res1 = (t0 << 16) + t1;
- res2 = (t2 << 16) + t3;
- da[0] = res1;
- da[1] = res2;
- da += 2;
- dp = (mlib_u16 *) da;
- sp = (mlib_u8 *) sa;
- i += 4;
- if (i < size) {
- *dp++ = tab1[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp++ = tab2[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp = tab0[(*sp)];
- }
- }
- else {
- *dp++ = tab0[(*sp)];
- size--;
- da = (mlib_u32 *) dp;
- s0 = sa[0];
- s1 = sa[1];
- sa += 2;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 10; i += 4, da += 2, sa++) {
- READ_U8_S16_NOTALIGN(tab1, tab2, tab0, tab1);
- s0 = s1;
- res1 = (t0 << 16) + t1;
- res2 = (t2 << 16) + t3;
- tab = tab0;
- tab0 = tab1;
- tab1 = tab2;
- tab2 = tab;
- s1 = sa[0];
- da[0] = res1;
- da[1] = res2;
- }
- READ_U8_S16_NOTALIGN(tab1, tab2, tab0, tab1);
- res1 = (t0 << 16) + t1;
- res2 = (t2 << 16) + t3;
- da[0] = res1;
- da[1] = res2;
- ADD_READ_U8_S16_NOTALIGN(tab2, tab0, tab1);
- res1 = (t0 << 16) + t1;
- da[2] = res1;
- da += 3;
- dp = (mlib_u16 *) da;
- *dp++ = (mlib_u16) t2;
- sp = (mlib_u8 *) sa;
- i += 7;
- if (i < size) {
- *dp++ = tab2[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp++ = tab0[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp = tab1[(*sp)];
- }
- }
- }
- }
- else if (csize == 4) {
- mlib_s32 i, j;
- for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
- mlib_u32 *sa;
- mlib_u32 *da;
- mlib_u16 *tab0 = (mlib_u16 *) table[0];
- mlib_u16 *tab1 = (mlib_u16 *) table[1];
- mlib_u16 *tab2 = (mlib_u16 *) table[2];
- mlib_u16 *tab3 = (mlib_u16 *) table[3];
- mlib_u16 *tab;
- mlib_u32 s0, s1, t0, t1, t2, t3;
- mlib_u32 res1, res2;
- mlib_s32 off;
- mlib_s32 size = xsize * 4;
- mlib_u16 *dp = (mlib_u16 *) dst;
- mlib_u8 *sp = (void *)src;
- off = (mlib_s32) ((4 - ((mlib_addr) src & 3)) & 3);
- if (off == 1) {
- *dp++ = tab0[(*sp)];
- tab = tab0;
- tab0 = tab1;
- tab1 = tab2;
- tab2 = tab3;
- tab3 = tab;
- size--;
- sp++;
- }
- else if (off == 2) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- tab = tab0;
- tab0 = tab2;
- tab2 = tab;
- tab = tab1;
- tab1 = tab3;
- tab3 = tab;
- size -= 2;
- sp += 2;
- }
- else if (off == 3) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- *dp++ = tab2[sp[2]];
- tab = tab3;
- tab3 = tab2;
- tab2 = tab1;
- tab1 = tab0;
- tab0 = tab;
- size -= 3;
- sp += 3;
- }
- sa = (mlib_u32 *) sp;
- if (((mlib_addr) dp & 3) == 0) {
- da = (mlib_u32 *) dp;
- s0 = sa[0];
- sa++;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 7; i += 4, da += 2, sa++) {
- READ_U8_S16_ALIGN(tab0, tab1, tab2, tab3);
- res1 = (t0 << 16) + t1;
- res2 = (t2 << 16) + t3;
- s0 = sa[0];
- da[0] = res1;
- da[1] = res2;
- }
- READ_U8_S16_ALIGN(tab0, tab1, tab2, tab3);
- res1 = (t0 << 16) + t1;
- res2 = (t2 << 16) + t3;
- da[0] = res1;
- da[1] = res2;
- da += 2;
- dp = (mlib_u16 *) da;
- sp = (mlib_u8 *) sa;
- i += 4;
- if (i < size) {
- *dp++ = tab0[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp++ = tab1[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp = tab2[(*sp)];
- }
- }
- else {
- *dp++ = tab0[(*sp)];
- size--;
- da = (mlib_u32 *) dp;
- s0 = sa[0];
- s1 = sa[1];
- sa += 2;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 10; i += 4, da += 2, sa++) {
- READ_U8_S16_NOTALIGN(tab1, tab2, tab3, tab0);
- s0 = s1;
- res1 = (t0 << 16) + t1;
- res2 = (t2 << 16) + t3;
- s1 = sa[0];
- da[0] = res1;
- da[1] = res2;
- }
- READ_U8_S16_NOTALIGN(tab1, tab2, tab3, tab0);
- res1 = (t0 << 16) + t1;
- res2 = (t2 << 16) + t3;
- da[0] = res1;
- da[1] = res2;
- ADD_READ_U8_S16_NOTALIGN(tab1, tab2, tab3);
- res1 = (t0 << 16) + t1;
- da[2] = res1;
- da += 3;
- dp = (mlib_u16 *) da;
- *dp++ = (mlib_u16) t2;
- sp = (mlib_u8 *) sa;
- i += 7;
- if (i < size) {
- *dp++ = tab0[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp++ = tab1[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp = tab2[(*sp)];
- }
- }
- }
- }
- }
- /***************************************************************/
- void mlib_c_ImageLookUp_S16_S16(const mlib_s16 *src,
- mlib_s32 slb,
- mlib_s16 *dst,
- mlib_s32 dlb,
- mlib_s32 xsize,
- mlib_s32 ysize,
- mlib_s32 csize,
- const mlib_s16 **table)
- {
- const mlib_s16 *table_base[4];
- mlib_s32 c;
- for (c = 0; c < csize; c++) {
- table_base[c] = &table[c][32768];
- }
- MLIB_C_IMAGELOOKUP(mlib_s16, mlib_s16, table_base);
- }
- /***************************************************************/
- void mlib_c_ImageLookUp_U16_S16(const mlib_u16 *src,
- mlib_s32 slb,
- mlib_s16 *dst,
- mlib_s32 dlb,
- mlib_s32 xsize,
- mlib_s32 ysize,
- mlib_s32 csize,
- const mlib_s16 **table)
- {
- const mlib_s16 *table_base[4];
- mlib_s32 c;
- for (c = 0; c < csize; c++) {
- table_base[c] = &table[c][0];
- }
- MLIB_C_IMAGELOOKUP(mlib_s16, mlib_u16, table_base);
- }
- /***************************************************************/
- void mlib_c_ImageLookUp_S32_S16(const mlib_s32 *src,
- mlib_s32 slb,
- mlib_s16 *dst,
- mlib_s32 dlb,
- mlib_s32 xsize,
- mlib_s32 ysize,
- mlib_s32 csize,
- const mlib_s16 **table)
- {
- const mlib_s16 *table_base[4];
- mlib_s32 c;
- for (c = 0; c < csize; c++) {
- table_base[c] = &table[c][TABLE_SHIFT_S32];
- }
- MLIB_C_IMAGELOOKUP(mlib_s16, mlib_s32, table_base);
- }
- /***************************************************************/
- void mlib_c_ImageLookUp_S16_U16(const mlib_s16 *src,
- mlib_s32 slb,
- mlib_u16 *dst,
- mlib_s32 dlb,
- mlib_s32 xsize,
- mlib_s32 ysize,
- mlib_s32 csize,
- const mlib_s16 **table)
- {
- const mlib_s16 *table_base[4];
- mlib_s32 c;
- for (c = 0; c < csize; c++) {
- table_base[c] = &table[c][32768];
- }
- MLIB_C_IMAGELOOKUP(mlib_u16, mlib_s16, table_base);
- }
- /***************************************************************/
- void mlib_c_ImageLookUp_U16_U16(const mlib_u16 *src,
- mlib_s32 slb,
- mlib_u16 *dst,
- mlib_s32 dlb,
- mlib_s32 xsize,
- mlib_s32 ysize,
- mlib_s32 csize,
- const mlib_s16 **table)
- {
- const mlib_s16 *table_base[4];
- mlib_s32 c;
- for (c = 0; c < csize; c++) {
- table_base[c] = &table[c][0];
- }
- MLIB_C_IMAGELOOKUP(mlib_u16, mlib_u16, table_base);
- }
- /***************************************************************/
- void mlib_c_ImageLookUp_S32_U16(const mlib_s32 *src,
- mlib_s32 slb,
- mlib_u16 *dst,
- mlib_s32 dlb,
- mlib_s32 xsize,
- mlib_s32 ysize,
- mlib_s32 csize,
- const mlib_s16 **table)
- {
- const mlib_s16 *table_base[4];
- mlib_s32 c;
- for (c = 0; c < csize; c++) {
- table_base[c] = &table[c][TABLE_SHIFT_S32];
- }
- MLIB_C_IMAGELOOKUP(mlib_u16, mlib_s32, table_base);
- }
- /***************************************************************/
- void mlib_c_ImageLookUp_U8_S32(const mlib_u8 *src,
- mlib_s32 slb,
- mlib_s32 *dst,
- mlib_s32 dlb,
- mlib_s32 xsize,
- mlib_s32 ysize,
- mlib_s32 csize,
- const mlib_s32 **table)
- {
- if (xsize * csize < 7) {
- MLIB_C_IMAGELOOKUP(mlib_s32, mlib_u8, table);
- }
- else if (csize == 1) {
- mlib_s32 i, j;
- for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
- mlib_u32 *sa;
- mlib_u32 *tab = (mlib_u32 *) table[0];
- mlib_u32 s0, t0, t1, t2, t3;
- mlib_s32 off;
- mlib_s32 size = xsize;
- mlib_u32 *dp = (mlib_u32 *) dst;
- mlib_u8 *sp = (void *)src;
- off = (mlib_s32) ((4 - ((mlib_addr) src & 3)) & 3);
- for (i = 0; i < off; i++, sp++) {
- *dp++ = tab[sp[0]];
- size--;
- }
- sa = (mlib_u32 *) sp;
- s0 = sa[0];
- sa++;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 7; i += 4, dp += 4, sa++) {
- READ_U8_S32(tab, tab, tab, tab);
- s0 = sa[0];
- dp[0] = t0;
- dp[1] = t1;
- dp[2] = t2;
- dp[3] = t3;
- }
- READ_U8_S32(tab, tab, tab, tab);
- dp[0] = t0;
- dp[1] = t1;
- dp[2] = t2;
- dp[3] = t3;
- dp += 4;
- sp = (mlib_u8 *) sa;
- i += 4;
- for (; i < size; i++, dp++, sp++)
- dp[0] = tab[sp[0]];
- }
- }
- else if (csize == 2) {
- mlib_s32 i, j;
- for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
- mlib_u32 *sa;
- mlib_u32 *tab0 = (mlib_u32 *) table[0];
- mlib_u32 *tab1 = (mlib_u32 *) table[1];
- mlib_u32 *tab;
- mlib_u32 s0, t0, t1, t2, t3;
- mlib_s32 off;
- mlib_s32 size = xsize * 2;
- mlib_u32 *dp = (mlib_u32 *) dst;
- mlib_u8 *sp = (void *)src;
- off = (mlib_s32) ((4 - ((mlib_addr) src & 3)) & 3);
- for (i = 0; i < off - 1; i += 2, sp += 2) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- size -= 2;
- }
- if ((off & 1) != 0) {
- *dp++ = tab0[*sp];
- size--;
- sp++;
- tab = tab0;
- tab0 = tab1;
- tab1 = tab;
- }
- sa = (mlib_u32 *) sp;
- s0 = sa[0];
- sa++;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 7; i += 4, dp += 4, sa++) {
- READ_U8_S32(tab0, tab1, tab0, tab1);
- s0 = sa[0];
- dp[0] = t0;
- dp[1] = t1;
- dp[2] = t2;
- dp[3] = t3;
- }
- READ_U8_S32(tab0, tab1, tab0, tab1);
- dp[0] = t0;
- dp[1] = t1;
- dp[2] = t2;
- dp[3] = t3;
- dp += 4;
- sp = (mlib_u8 *) sa;
- i += 4;
- for (; i < size - 1; i += 2, sp += 2) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- }
- if (i < size)
- *dp = tab0[(*sp)];
- }
- }
- else if (csize == 3) {
- mlib_s32 i, j;
- for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
- mlib_u32 *sa;
- mlib_u32 *tab0 = (mlib_u32 *) table[0];
- mlib_u32 *tab1 = (mlib_u32 *) table[1];
- mlib_u32 *tab2 = (mlib_u32 *) table[2];
- mlib_u32 *tab;
- mlib_u32 s0, t0, t1, t2, t3;
- mlib_s32 off;
- mlib_s32 size = xsize * 3;
- mlib_u32 *dp = (mlib_u32 *) dst;
- mlib_u8 *sp = (void *)src;
- off = (mlib_s32) ((4 - ((mlib_addr) src & 3)) & 3);
- if (off == 1) {
- *dp++ = tab0[(*sp)];
- tab = tab0;
- tab0 = tab1;
- tab1 = tab2;
- tab2 = tab;
- size--;
- sp++;
- }
- else if (off == 2) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- tab = tab2;
- tab2 = tab1;
- tab1 = tab0;
- tab0 = tab;
- size -= 2;
- sp += 2;
- }
- else if (off == 3) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- *dp++ = tab2[sp[2]];
- size -= 3;
- sp += 3;
- }
- sa = (mlib_u32 *) sp;
- s0 = sa[0];
- sa++;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 7; i += 4, dp += 4, sa++) {
- READ_U8_S32(tab0, tab1, tab2, tab0);
- tab = tab0;
- tab0 = tab1;
- tab1 = tab2;
- tab2 = tab;
- s0 = sa[0];
- dp[0] = t0;
- dp[1] = t1;
- dp[2] = t2;
- dp[3] = t3;
- }
- READ_U8_S32(tab0, tab1, tab2, tab0);
- dp[0] = t0;
- dp[1] = t1;
- dp[2] = t2;
- dp[3] = t3;
- dp += 4;
- sp = (mlib_u8 *) sa;
- i += 4;
- if (i < size) {
- *dp++ = tab1[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp++ = tab2[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp = tab0[(*sp)];
- }
- }
- }
- else if (csize == 4) {
- mlib_s32 i, j;
- for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
- mlib_u32 *sa;
- mlib_u32 *tab0 = (mlib_u32 *) table[0];
- mlib_u32 *tab1 = (mlib_u32 *) table[1];
- mlib_u32 *tab2 = (mlib_u32 *) table[2];
- mlib_u32 *tab3 = (mlib_u32 *) table[3];
- mlib_u32 *tab;
- mlib_u32 s0, t0, t1, t2, t3;
- mlib_s32 off;
- mlib_s32 size = xsize * 4;
- mlib_u32 *dp = (mlib_u32 *) dst;
- mlib_u8 *sp = (void *)src;
- off = (mlib_s32) ((4 - ((mlib_addr) src & 3)) & 3);
- if (off == 1) {
- *dp++ = tab0[(*sp)];
- tab = tab0;
- tab0 = tab1;
- tab1 = tab2;
- tab2 = tab3;
- tab3 = tab;
- size--;
- sp++;
- }
- else if (off == 2) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- tab = tab0;
- tab0 = tab2;
- tab2 = tab;
- tab = tab1;
- tab1 = tab3;
- tab3 = tab;
- size -= 2;
- sp += 2;
- }
- else if (off == 3) {
- *dp++ = tab0[sp[0]];
- *dp++ = tab1[sp[1]];
- *dp++ = tab2[sp[2]];
- tab = tab3;
- tab3 = tab2;
- tab2 = tab1;
- tab1 = tab0;
- tab0 = tab;
- size -= 3;
- sp += 3;
- }
- sa = (mlib_u32 *) sp;
- s0 = sa[0];
- sa++;
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
- for (i = 0; i < size - 7; i += 4, dp += 4, sa++) {
- READ_U8_S32(tab0, tab1, tab2, tab3);
- s0 = sa[0];
- dp[0] = t0;
- dp[1] = t1;
- dp[2] = t2;
- dp[3] = t3;
- }
- READ_U8_S32(tab0, tab1, tab2, tab3);
- dp[0] = t0;
- dp[1] = t1;
- dp[2] = t2;
- dp[3] = t3;
- dp += 4;
- sp = (mlib_u8 *) sa;
- i += 4;
- if (i < size) {
- *dp++ = tab0[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp++ = tab1[(*sp)];
- i++;
- sp++;
- }
- if (i < size) {
- *dp = tab2[(*sp)];
- }
- }
- }
- }
- /***************************************************************/
- void mlib_c_ImageLookUp_S16_S32(const mlib_s16 *src,
- mlib_s32 slb,
- mlib_s32 *dst,
- mlib_s32 dlb,
- mlib_s32 xsize,
- mlib_s32 ysize,
- mlib_s32 csize,
- const mlib_s32 **table)
- {
- const mlib_s32 *table_base[4];
- mlib_s32 c;
- for (c = 0; c < csize; c++) {
- table_base[c] = &table[c][32768];
- }
- MLIB_C_IMAGELOOKUP(mlib_s32, mlib_s16, table_base);
- }
- /***************************************************************/
- void mlib_c_ImageLookUp_U16_S32(const mlib_u16 *src,
- …
Large files files are truncated, but you can click here to view the full file