< prev index next >
src/java.desktop/share/native/libmlib_image/mlib_c_ImageAffine_BL_S16.c
Print this page
rev 59383 : [mq]: final
*** 1,7 ****
/*
! * 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
--- 1,7 ----
/*
! * Copyright (c) 2003, 2020, 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
*** 75,293 ****
#define ROUND(x) (x)
#define FUN_NAME(CHAN) mlib_ImageAffine_s16_##CHAN##_bl
/***************************************************************/
! #ifdef __sparc /* for SPARC, using floating-point multiplies is faster */
!
! /***************************************************************/
! #define GET_POINTERS(ind) \
! fdx = (FTYPE)(X & MLIB_MASK) * scale; \
! fdy = (FTYPE)(Y & MLIB_MASK) * scale; \
! ySrc = MLIB_POINTER_SHIFT(Y); Y += dY; \
! xSrc = X >> MLIB_SHIFT; X += dX; \
! srcPixelPtr = MLIB_POINTER_GET(lineAddr, ySrc) + ind * xSrc; \
! srcPixelPtr2 = (DTYPE *)((mlib_u8 *)srcPixelPtr + srcYStride)
!
! /***************************************************************/
! #define COUNT(ind) \
! pix0_##ind = a00_##ind + fdy * (a10_##ind - a00_##ind); \
! pix1_##ind = a01_##ind + fdy * (a11_##ind - a01_##ind); \
! res##ind = ROUND(pix0_##ind + fdx * (pix1_##ind - pix0_##ind))
!
! /***************************************************************/
! #define LOAD(ind, ind1, ind2) \
! a00_##ind = I2F(srcPixelPtr[ind1]); \
! a01_##ind = I2F(srcPixelPtr[ind2]); \
! a10_##ind = I2F(srcPixelPtr2[ind1]); \
! a11_##ind = I2F(srcPixelPtr2[ind2])
!
! mlib_status FUN_NAME(1ch)(mlib_affine_param *param)
! {
! DECLAREVAR_BL();
! DTYPE *dstLineEnd;
! DTYPE *srcPixelPtr2;
! FTYPE scale = (FTYPE) 1.0 / MLIB_PREC;
!
! for (j = yStart; j <= yFinish; j++) {
! FTYPE fdx, fdy;
! TTYPE a00_0, a01_0, a10_0, a11_0;
! FTYPE pix0_0, pix1_0, res0;
!
! CLIP(1);
! dstLineEnd = (DTYPE *) dstData + xRight;
!
! GET_POINTERS(1);
! LOAD(0, 0, 1);
! #ifdef __SUNPRO_C
! #pragma pipeloop(0)
! #endif /* __SUNPRO_C */
! for (; dstPixelPtr < dstLineEnd; dstPixelPtr++) {
! COUNT(0);
! GET_POINTERS(1);
! LOAD(0, 0, 1);
! dstPixelPtr[0] = (DTYPE) res0;
! }
!
! COUNT(0);
! dstPixelPtr[0] = (DTYPE) res0;
! }
!
! return MLIB_SUCCESS;
! }
!
! mlib_status FUN_NAME(2ch)(mlib_affine_param *param)
! {
! DECLAREVAR_BL();
! DTYPE *dstLineEnd;
! DTYPE *srcPixelPtr2;
! FTYPE scale = (FTYPE) 1.0 / MLIB_PREC;
!
! for (j = yStart; j <= yFinish; j++) {
! FTYPE fdx, fdy;
! TTYPE a00_0, a01_0, a10_0, a11_0;
! TTYPE a00_1, a01_1, a10_1, a11_1;
! FTYPE pix0_0, pix1_0, res0;
! FTYPE pix0_1, pix1_1, res1;
!
! CLIP(2);
! dstLineEnd = (DTYPE *) dstData + 2 * xRight;
!
! GET_POINTERS(2);
! LOAD(0, 0, 2);
! LOAD(1, 1, 3);
! #ifdef __SUNPRO_C
! #pragma pipeloop(0)
! #endif /* __SUNPRO_C */
! for (; dstPixelPtr < dstLineEnd; dstPixelPtr += 2) {
! COUNT(0);
! COUNT(1);
! GET_POINTERS(2);
! LOAD(0, 0, 2);
! LOAD(1, 1, 3);
! dstPixelPtr[0] = (DTYPE) res0;
! dstPixelPtr[1] = (DTYPE) res1;
! }
!
! COUNT(0);
! COUNT(1);
! dstPixelPtr[0] = (DTYPE) res0;
! dstPixelPtr[1] = (DTYPE) res1;
! }
!
! return MLIB_SUCCESS;
! }
!
! mlib_status FUN_NAME(3ch)(mlib_affine_param *param)
! {
! DECLAREVAR_BL();
! DTYPE *dstLineEnd;
! DTYPE *srcPixelPtr2;
! FTYPE scale = (FTYPE) 1.0 / MLIB_PREC;
!
! for (j = yStart; j <= yFinish; j++) {
! FTYPE fdx, fdy;
! FTYPE a00_0, a01_0, a10_0, a11_0;
! FTYPE a00_1, a01_1, a10_1, a11_1;
! FTYPE a00_2, a01_2, a10_2, a11_2;
! FTYPE pix0_0, pix1_0, res0;
! FTYPE pix0_1, pix1_1, res1;
! FTYPE pix0_2, pix1_2, res2;
!
! CLIP(3);
! dstLineEnd = (DTYPE *) dstData + 3 * xRight;
!
! GET_POINTERS(3);
! LOAD(0, 0, 3);
! LOAD(1, 1, 4);
! LOAD(2, 2, 5);
! #ifdef __SUNPRO_C
! #pragma pipeloop(0)
! #endif /* __SUNPRO_C */
! for (; dstPixelPtr < dstLineEnd; dstPixelPtr += 3) {
! COUNT(0);
! COUNT(1);
! COUNT(2);
! GET_POINTERS(3);
! LOAD(0, 0, 3);
! LOAD(1, 1, 4);
! LOAD(2, 2, 5);
! dstPixelPtr[0] = (DTYPE) res0;
! dstPixelPtr[1] = (DTYPE) res1;
! dstPixelPtr[2] = (DTYPE) res2;
! }
!
! COUNT(0);
! COUNT(1);
! COUNT(2);
! dstPixelPtr[0] = (DTYPE) res0;
! dstPixelPtr[1] = (DTYPE) res1;
! dstPixelPtr[2] = (DTYPE) res2;
! }
!
! return MLIB_SUCCESS;
! }
!
! mlib_status FUN_NAME(4ch)(mlib_affine_param *param)
! {
! DECLAREVAR_BL();
! DTYPE *dstLineEnd;
! DTYPE *srcPixelPtr2;
! FTYPE scale = (FTYPE) 1.0 / MLIB_PREC;
!
! for (j = yStart; j <= yFinish; j++) {
! FTYPE fdx, fdy;
! TTYPE a00_0, a01_0, a10_0, a11_0;
! TTYPE a00_1, a01_1, a10_1, a11_1;
! TTYPE a00_2, a01_2, a10_2, a11_2;
! TTYPE a00_3, a01_3, a10_3, a11_3;
! FTYPE pix0_0, pix1_0, res0;
! FTYPE pix0_1, pix1_1, res1;
! FTYPE pix0_2, pix1_2, res2;
! FTYPE pix0_3, pix1_3, res3;
!
! CLIP(4);
! dstLineEnd = (DTYPE *) dstData + 4 * xRight;
!
! GET_POINTERS(4);
! LOAD(0, 0, 4);
! LOAD(1, 1, 5);
! LOAD(2, 2, 6);
! LOAD(3, 3, 7);
! #ifdef __SUNPRO_C
! #pragma pipeloop(0)
! #endif /* __SUNPRO_C */
! for (; dstPixelPtr < dstLineEnd; dstPixelPtr += 4) {
! COUNT(0);
! COUNT(1);
! COUNT(2);
! COUNT(3);
! GET_POINTERS(4);
! LOAD(0, 0, 4);
! LOAD(1, 1, 5);
! LOAD(2, 2, 6);
! LOAD(3, 3, 7);
! dstPixelPtr[0] = (DTYPE) res0;
! dstPixelPtr[1] = (DTYPE) res1;
! dstPixelPtr[2] = (DTYPE) res2;
! dstPixelPtr[3] = (DTYPE) res3;
! }
!
! COUNT(0);
! COUNT(1);
! COUNT(2);
! COUNT(3);
! dstPixelPtr[0] = (DTYPE) res0;
! dstPixelPtr[1] = (DTYPE) res1;
! dstPixelPtr[2] = (DTYPE) res2;
! dstPixelPtr[3] = (DTYPE) res3;
! }
!
! return MLIB_SUCCESS;
! }
!
! #else /* for x86, using integer multiplies is faster */
/***************************************************************/
/* for SHORT/USHORT decrease MLIB_SHIFT due to
* overflow in multiplies like fdy * (a10 - a00)
*/
--- 75,85 ----
#define ROUND(x) (x)
#define FUN_NAME(CHAN) mlib_ImageAffine_s16_##CHAN##_bl
/***************************************************************/
! /* for x86, using integer multiplies is faster */
/***************************************************************/
/* for SHORT/USHORT decrease MLIB_SHIFT due to
* overflow in multiplies like fdy * (a10 - a00)
*/
*** 350,362 ****
#endif /* MLIB_SHIFT == 15 */
GET_POINTERS(1);
LOAD(0, 0, 1);
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
for (; dstPixelPtr < dstLineEnd; dstPixelPtr++) {
COUNT(0);
GET_POINTERS(1);
LOAD(0, 0, 1);
dstPixelPtr[0] = (DTYPE) res0;
--- 142,151 ----
*** 402,414 ****
#endif /* MLIB_SHIFT == 15 */
GET_POINTERS(2);
LOAD(0, 0, 2);
LOAD(1, 1, 3);
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
for (; dstPixelPtr < dstLineEnd; dstPixelPtr += 2) {
COUNT(0);
COUNT(1);
GET_POINTERS(2);
LOAD(0, 0, 2);
--- 191,200 ----
*** 462,474 ****
GET_POINTERS(3);
LOAD(0, 0, 3);
LOAD(1, 1, 4);
LOAD(2, 2, 5);
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
for (; dstPixelPtr < dstLineEnd; dstPixelPtr += 3) {
COUNT(0);
COUNT(1);
COUNT(2);
GET_POINTERS(3);
--- 248,257 ----
*** 530,542 ****
GET_POINTERS(4);
LOAD(0, 0, 4);
LOAD(1, 1, 5);
LOAD(2, 2, 6);
LOAD(3, 3, 7);
- #ifdef __SUNPRO_C
- #pragma pipeloop(0)
- #endif /* __SUNPRO_C */
for (; dstPixelPtr < dstLineEnd; dstPixelPtr += 4) {
COUNT(0);
COUNT(1);
COUNT(2);
COUNT(3);
--- 313,322 ----
*** 562,569 ****
}
return MLIB_SUCCESS;
}
- #endif /* __sparc ( for SPARC, using floating-point multiplies is faster ) */
-
/***************************************************************/
--- 342,347 ----
< prev index next >