1 /*
2 * Copyright (c) 2003, 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
242 *da++ = dd_array[*sa++];
243 i += 8;
244 }
245
246 if (i < size) {
247
248 #ifdef _NO_LONGLONG
249
250 mlib_u32 emask;
251 val0 = sa[0];
252 val1 = p_dd[2*val0];
253
254 if (i < (size - 4)) {
255 ((mlib_u32*)da)[0] = val1;
256 da = (TYPE_64BIT *) ((mlib_u8 *)da + 4);
257 i += 4;
258 val1 = p_dd[2*val0+1];
259 }
260
261 #ifdef _LITTLE_ENDIAN
262 emask = (mlib_u32)((mlib_s32)(-1)) >> ((4 - (size - i)) * 8);
263 #else
264 emask = (mlib_s32)(-1) << ((4 - (size - i)) * 8);
265 #endif /* _LITTLE_ENDIAN */
266 ((mlib_u32*)da)[0] = (val1 & emask) | (((mlib_u32*)da)[0] &~ emask);
267
268 #else /* _NO_LONGLONG */
269
270 #ifdef _LITTLE_ENDIAN
271 mlib_u64 emask = (mlib_u64)((mlib_s64)(-1)) >> ((8 - (size - i)) * 8);
272 #else
273 mlib_u64 emask = (mlib_s64)(-1) << ((8 - (size - i)) * 8);
274 #endif /* _LITTLE_ENDIAN */
275
276 ((mlib_u64*)da)[0] = (((mlib_u64*)dd_array)[sa[0]] & emask) | (((mlib_u64*)da)[0] &~ emask);
277
278 #endif /* _NO_LONGLONG */
279 }
280
281 src += slb;
282 dst += dlb;
283 }
284
285 if (buff != (mlib_u8*)buff_lcl) mlib_free(buff);
286
287 return MLIB_SUCCESS;
288 }
289
290 /***************************************************************/
291 mlib_status mlib_ImageLookUp_Bit_U8_2(const mlib_u8 *src,
292 mlib_s32 slb,
293 mlib_u8 *dst,
378 dd1 = p_dd[2*(s0 >> 4)];
379 dd2 = p_dd[2*(s0 >> 4)+1];
380
381 if (i < (size - 8)) {
382 ((mlib_u32*)da)[0] = dd1;
383 ((mlib_u32*)da)[1] = dd2;
384 da++;
385 i += 8;
386 dd1 = p_dd[2*(s0 & 0xf)];
387 dd2 = p_dd[2*(s0 & 0xf)+1];
388 }
389
390 if (i < (size - 4)) {
391 ((mlib_u32*)da)[0] = dd1;
392 da = (DTYPE *) ((mlib_u8 *)da + 4);
393 i += 4;
394 dd1 = dd2;
395 }
396
397 #ifdef _LITTLE_ENDIAN
398 emask = (mlib_u32)((mlib_s32)(-1)) >> ((4 - (size - i)) * 8);
399 #else
400 emask = (mlib_s32)(-1) << ((4 - (size - i)) * 8);
401 #endif /* _LITTLE_ENDIAN */
402 ((mlib_u32*)da)[0] = (dd1 & emask) | (((mlib_u32*)da)[0] &~ emask);
403
404 #else /* _NO_LONGLONG */
405
406 dd = ((mlib_u64*)dd_array)[s0 >> 4];
407
408 if (i < (size - 8)) {
409 ((mlib_u64*)da)[0] = dd;
410 da++;
411 i += 8;
412 dd = ((mlib_u64*)dd_array)[s0 & 0xf];
413 }
414
415 #ifdef _LITTLE_ENDIAN
416 emask = (mlib_u64)((mlib_s64)(-1)) >> ((8 - (size - i)) * 8);
417 #else
418 emask = (mlib_s64)(-1) << ((8 - (size - i)) * 8);
419 #endif /* _LITTLE_ENDIAN */
420 ((mlib_u64*)da)[0] = (dd & emask) | (((mlib_u64*)da)[0] &~ emask);
421
422 #endif /* _NO_LONGLONG */
423 }
424
425 if (dp != dst) mlib_ImageCopy_na(dp, dst, size);
426
427 src += slb;
428 dst += dlb;
429 }
430
431 if (buff != (mlib_u8*)buff_lcl) mlib_free(buff);
432
433 return MLIB_SUCCESS;
434 }
435
436 /***************************************************************/
437 mlib_status mlib_ImageLookUp_Bit_U8_3(const mlib_u8 *src,
438 mlib_s32 slb,
548
549 if (i < (size - 4)) {
550 *da++ = dd;
551 i += 4;
552 dd = ((mlib_u32*)(d_array01 + (s0 & 0xF)))[0];
553 }
554
555 if (i < (size - 4)) {
556 *da++ = dd;
557 i += 4;
558 dd = ((mlib_u32*)(d_array12 + (s0 & 0xF)))[0];
559 }
560
561 if (i < (size - 4)) {
562 *da++ = dd;
563 i += 4;
564 dd = ((mlib_u32*)(d_array12 + (s0 & 0xF)))[1];
565 }
566
567 #ifdef _LITTLE_ENDIAN
568 emask = (mlib_u32)((mlib_s32)(-1)) >> ((4 - (size - i)) * 8);
569 #else
570 emask = (mlib_s32)(-1) << ((4 - (size - i)) * 8);
571 #endif /* _LITTLE_ENDIAN */
572 da[0] = (dd & emask) | (da[0] &~ emask);
573 }
574
575 if (dp != dst) mlib_ImageCopy_na(dp, dst, size);
576
577 src += slb;
578 dst += dlb;
579 }
580
581 if (buff != (mlib_u8*)buff_lcl) mlib_free(buff);
582
583 return MLIB_SUCCESS;
584 }
585
586 /***************************************************************/
587 mlib_status mlib_ImageLookUp_Bit_U8_4(const mlib_u8 *src,
588 mlib_s32 slb,
589 mlib_u8 *dst,
590 mlib_s32 dlb,
|
1 /*
2 * Copyright (c) 2003, 2018, 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
242 *da++ = dd_array[*sa++];
243 i += 8;
244 }
245
246 if (i < size) {
247
248 #ifdef _NO_LONGLONG
249
250 mlib_u32 emask;
251 val0 = sa[0];
252 val1 = p_dd[2*val0];
253
254 if (i < (size - 4)) {
255 ((mlib_u32*)da)[0] = val1;
256 da = (TYPE_64BIT *) ((mlib_u8 *)da + 4);
257 i += 4;
258 val1 = p_dd[2*val0+1];
259 }
260
261 #ifdef _LITTLE_ENDIAN
262 emask = (~(mlib_u32)0) >> ((4 - (size - i)) * 8);
263 #else
264 emask = (~(mlib_u32)0) << ((4 - (size - i)) * 8);
265 #endif /* _LITTLE_ENDIAN */
266 ((mlib_u32*)da)[0] = (val1 & emask) | (((mlib_u32*)da)[0] &~ emask);
267
268 #else /* _NO_LONGLONG */
269
270 #ifdef _LITTLE_ENDIAN
271 mlib_u64 emask = (~(mlib_u64)0) >> ((8 - (size - i)) * 8);
272 #else
273 mlib_u64 emask = (~(mlib_u64)0) << ((8 - (size - i)) * 8);
274 #endif /* _LITTLE_ENDIAN */
275
276 ((mlib_u64*)da)[0] = (((mlib_u64*)dd_array)[sa[0]] & emask) | (((mlib_u64*)da)[0] &~ emask);
277
278 #endif /* _NO_LONGLONG */
279 }
280
281 src += slb;
282 dst += dlb;
283 }
284
285 if (buff != (mlib_u8*)buff_lcl) mlib_free(buff);
286
287 return MLIB_SUCCESS;
288 }
289
290 /***************************************************************/
291 mlib_status mlib_ImageLookUp_Bit_U8_2(const mlib_u8 *src,
292 mlib_s32 slb,
293 mlib_u8 *dst,
378 dd1 = p_dd[2*(s0 >> 4)];
379 dd2 = p_dd[2*(s0 >> 4)+1];
380
381 if (i < (size - 8)) {
382 ((mlib_u32*)da)[0] = dd1;
383 ((mlib_u32*)da)[1] = dd2;
384 da++;
385 i += 8;
386 dd1 = p_dd[2*(s0 & 0xf)];
387 dd2 = p_dd[2*(s0 & 0xf)+1];
388 }
389
390 if (i < (size - 4)) {
391 ((mlib_u32*)da)[0] = dd1;
392 da = (DTYPE *) ((mlib_u8 *)da + 4);
393 i += 4;
394 dd1 = dd2;
395 }
396
397 #ifdef _LITTLE_ENDIAN
398 emask = (~(mlib_u32)0) >> ((4 - (size - i)) * 8);
399 #else
400 emask = (~(mlib_u32)0) << ((4 - (size - i)) * 8);
401 #endif /* _LITTLE_ENDIAN */
402 ((mlib_u32*)da)[0] = (dd1 & emask) | (((mlib_u32*)da)[0] &~ emask);
403
404 #else /* _NO_LONGLONG */
405
406 dd = ((mlib_u64*)dd_array)[s0 >> 4];
407
408 if (i < (size - 8)) {
409 ((mlib_u64*)da)[0] = dd;
410 da++;
411 i += 8;
412 dd = ((mlib_u64*)dd_array)[s0 & 0xf];
413 }
414
415 #ifdef _LITTLE_ENDIAN
416 emask = (~(mlib_u64)0) >> ((8 - (size - i)) * 8);
417 #else
418 emask = (~(mlib_u64)0) << ((8 - (size - i)) * 8);
419 #endif /* _LITTLE_ENDIAN */
420 ((mlib_u64*)da)[0] = (dd & emask) | (((mlib_u64*)da)[0] &~ emask);
421
422 #endif /* _NO_LONGLONG */
423 }
424
425 if (dp != dst) mlib_ImageCopy_na(dp, dst, size);
426
427 src += slb;
428 dst += dlb;
429 }
430
431 if (buff != (mlib_u8*)buff_lcl) mlib_free(buff);
432
433 return MLIB_SUCCESS;
434 }
435
436 /***************************************************************/
437 mlib_status mlib_ImageLookUp_Bit_U8_3(const mlib_u8 *src,
438 mlib_s32 slb,
548
549 if (i < (size - 4)) {
550 *da++ = dd;
551 i += 4;
552 dd = ((mlib_u32*)(d_array01 + (s0 & 0xF)))[0];
553 }
554
555 if (i < (size - 4)) {
556 *da++ = dd;
557 i += 4;
558 dd = ((mlib_u32*)(d_array12 + (s0 & 0xF)))[0];
559 }
560
561 if (i < (size - 4)) {
562 *da++ = dd;
563 i += 4;
564 dd = ((mlib_u32*)(d_array12 + (s0 & 0xF)))[1];
565 }
566
567 #ifdef _LITTLE_ENDIAN
568 emask = (~(mlib_u32)0) >> ((4 - (size - i)) * 8);
569 #else
570 emask = (~(mlib_u32)0) << ((4 - (size - i)) * 8);
571 #endif /* _LITTLE_ENDIAN */
572 da[0] = (dd & emask) | (da[0] &~ emask);
573 }
574
575 if (dp != dst) mlib_ImageCopy_na(dp, dst, size);
576
577 src += slb;
578 dst += dlb;
579 }
580
581 if (buff != (mlib_u8*)buff_lcl) mlib_free(buff);
582
583 return MLIB_SUCCESS;
584 }
585
586 /***************************************************************/
587 mlib_status mlib_ImageLookUp_Bit_U8_4(const mlib_u8 *src,
588 mlib_s32 slb,
589 mlib_u8 *dst,
590 mlib_s32 dlb,
|