Bug Summary

File:jdk/src/java.desktop/share/native/libawt/java2d/loops/ByteIndexed.c
Warning:line 209, column 10
Value stored to 'dstScan' during its initialization is never read

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name ByteIndexed.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -mthread-model posix -fno-delete-null-pointer-checks -mframe-pointer=all -relaxed-aliasing -fmath-errno -fno-rounding-math -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64 -dwarf-column-info -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib/llvm-10/lib/clang/10.0.0 -I /home/daniel/Projects/java/jdk/build/linux-x86_64-server-fastdebug/support/modules_include/java.base -I /home/daniel/Projects/java/jdk/build/linux-x86_64-server-fastdebug/support/modules_include/java.base/linux -I /home/daniel/Projects/java/jdk/src/java.base/share/native/libjava -I /home/daniel/Projects/java/jdk/src/java.base/unix/native/libjava -I /home/daniel/Projects/java/jdk/src/hotspot/share/include -I /home/daniel/Projects/java/jdk/src/hotspot/os/posix/include -D LIBC=gnu -D _GNU_SOURCE -D _REENTRANT -D _LARGEFILE64_SOURCE -D LINUX -D DEBUG -D _LITTLE_ENDIAN -D ARCH="amd64" -D amd64 -D _LP64=1 -D __MEDIALIB_OLD_NAMES -D __USE_J2D_NAMES -D MLIB_NO_LIBSUNMATH -I /home/daniel/Projects/java/jdk/src/java.desktop/unix/native/libawt -I /home/daniel/Projects/java/jdk/src/java.desktop/share/native/libawt -I /home/daniel/Projects/java/jdk/src/java.desktop/share/native/common/awt/debug -I /home/daniel/Projects/java/jdk/src/java.desktop/unix/native/common/awt -I /home/daniel/Projects/java/jdk/build/linux-x86_64-server-fastdebug/support/headers/java.desktop -I /home/daniel/Projects/java/jdk/src/java.desktop/share/native/libawt/awt/image -I /home/daniel/Projects/java/jdk/src/java.desktop/share/native/libawt/awt/image/cvutils -I /home/daniel/Projects/java/jdk/src/java.desktop/unix/native/libawt/java2d -I /home/daniel/Projects/java/jdk/src/java.desktop/share/native/libawt/java2d -I /home/daniel/Projects/java/jdk/src/java.desktop/share/native/libawt/java2d/loops -I /home/daniel/Projects/java/jdk/src/java.desktop/share/native/libawt/java2d/pipe -I /home/daniel/Projects/java/jdk/build/linux-x86_64-server-fastdebug/support/headers/java.base -I /home/daniel/Projects/java/jdk/src/java.desktop/share/native/libawt/awt/medialib -I /home/daniel/Projects/java/jdk/src/java.desktop/share/native/common/awt/medialib -I /home/daniel/Projects/java/jdk/src/java.desktop/share/native/libmlib_image -I /home/daniel/Projects/java/jdk/src/java.desktop/unix/native/include -I /home/daniel/Projects/java/jdk/src/java.desktop/share/native/include -I /home/daniel/Projects/java/jdk/src/java.base/linux/native/libjava -I /home/daniel/Projects/java/jdk/src/java.base/unix/native/libjava -I /home/daniel/Projects/java/jdk/src/java.base/share/native/libjava -I /home/daniel/Projects/java/jdk/src/java.base/unix/native/include -I /home/daniel/Projects/java/jdk/src/java.base/share/native/include -D _FORTIFY_SOURCE=2 -internal-isystem /usr/local/include -internal-isystem /usr/lib/llvm-10/lib/clang/10.0.0/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -O3 -Wno-unused-parameter -Wno-unused -Wno-sign-compare -Wno-unused-result -Wno-maybe-uninitialized -Wno-format-nonliteral -Wno-parentheses -Wno-unused-value -Wno-unused-function -std=c99 -fdebug-compilation-dir /home/daniel/Projects/java/jdk/make -ferror-limit 19 -fmessage-length 0 -fvisibility default -stack-protector 1 -fgnuc-version=4.2.1 -fobjc-runtime=gcc -fdiagnostics-show-option -vectorize-loops -vectorize-slp -analyzer-output=html -faddrsig -o /home/daniel/Projects/java/scan/2021-12-21-193737-8510-1 -x c /home/daniel/Projects/java/jdk/src/java.desktop/share/native/libawt/java2d/loops/ByteIndexed.c
1/*
2 * Copyright (c) 2000, 2004, 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#include <string.h>
27
28#include "AnyByte.h"
29#include "ByteIndexed.h"
30#include "AlphaMacros.h"
31
32#include "IntArgb.h"
33#include "IntArgbBm.h"
34#include "IntArgbPre.h"
35#include "IntRgb.h"
36#include "ThreeByteBgr.h"
37#include "ByteGray.h"
38#include "Index12Gray.h"
39
40/*
41 * This file declares, registers, and defines the various graphics
42 * primitive loops to manipulate surfaces of type "ByteIndexed".
43 *
44 * See also LoopMacros.h
45 */
46
47RegisterFunc RegisterByteIndexed;
48
49DECLARE_CONVERT_BLIT(IntArgb, ByteIndexed)BlitFunc IntArgbToByteIndexedConvert;
50DECLARE_CONVERT_BLIT(ThreeByteBgr, ByteIndexed)BlitFunc ThreeByteBgrToByteIndexedConvert;
51DECLARE_CONVERT_BLIT(ByteGray, ByteIndexed)BlitFunc ByteGrayToByteIndexedConvert;
52DECLARE_CONVERT_BLIT(ByteIndexed, ByteIndexed)BlitFunc ByteIndexedToByteIndexedConvert;
53DECLARE_CONVERT_BLIT(Index12Gray, ByteIndexed)BlitFunc Index12GrayToByteIndexedConvert;
54DECLARE_SCALE_BLIT(IntArgb, ByteIndexed)ScaleBlitFunc IntArgbToByteIndexedScaleConvert;
55DECLARE_SCALE_BLIT(ThreeByteBgr, ByteIndexed)ScaleBlitFunc ThreeByteBgrToByteIndexedScaleConvert;
56DECLARE_SCALE_BLIT(ByteGray, ByteIndexed)ScaleBlitFunc ByteGrayToByteIndexedScaleConvert;
57DECLARE_SCALE_BLIT(Index12Gray, ByteIndexed)ScaleBlitFunc Index12GrayToByteIndexedScaleConvert;
58DECLARE_SCALE_BLIT(ByteIndexed, ByteIndexed)ScaleBlitFunc ByteIndexedToByteIndexedScaleConvert;
59DECLARE_XPAR_CONVERT_BLIT(ByteIndexedBm, ByteIndexed)BlitFunc ByteIndexedBmToByteIndexedXparOver;
60DECLARE_XPAR_SCALE_BLIT(ByteIndexedBm, ByteIndexed)ScaleBlitFunc ByteIndexedBmToByteIndexedScaleXparOver;
61DECLARE_XPAR_SCALE_BLIT(IntArgbBm, ByteIndexed)ScaleBlitFunc IntArgbBmToByteIndexedScaleXparOver;
62DECLARE_XPAR_BLITBG(ByteIndexedBm, ByteIndexed)BlitBgFunc ByteIndexedBmToByteIndexedXparBgCopy;
63DECLARE_XPAR_CONVERT_BLIT(IntArgbBm, ByteIndexed)BlitFunc IntArgbBmToByteIndexedXparOver;
64DECLARE_XPAR_BLITBG(IntArgbBm, ByteIndexed)BlitBgFunc IntArgbBmToByteIndexedXparBgCopy;
65
66DECLARE_XOR_BLIT(IntArgb, ByteIndexed)BlitFunc IntArgbToByteIndexedXorBlit;
67DECLARE_ALPHA_MASKFILL(ByteIndexed)MaskFillFunc ByteIndexedAlphaMaskFill;
68DECLARE_ALPHA_MASKBLIT(IntArgb, ByteIndexed)MaskBlitFunc IntArgbToByteIndexedAlphaMaskBlit;
69DECLARE_ALPHA_MASKBLIT(IntArgbPre, ByteIndexed)MaskBlitFunc IntArgbPreToByteIndexedAlphaMaskBlit;
70DECLARE_ALPHA_MASKBLIT(IntRgb, ByteIndexed)MaskBlitFunc IntRgbToByteIndexedAlphaMaskBlit;
71DECLARE_SOLID_DRAWGLYPHLISTAA(ByteIndexed)DrawGlyphListAAFunc ByteIndexedDrawGlyphListAA;
72
73DECLARE_TRANSFORMHELPER_FUNCS(ByteIndexed)TransformHelperFunc ByteIndexedNrstNbrTransformHelper; TransformHelperFunc
ByteIndexedBilinearTransformHelper; TransformHelperFunc ByteIndexedBicubicTransformHelper
; TransformHelperFuncs ByteIndexedTransformHelperFuncs
;
74DECLARE_TRANSFORMHELPER_FUNCS(ByteIndexedBm)TransformHelperFunc ByteIndexedBmNrstNbrTransformHelper; TransformHelperFunc
ByteIndexedBmBilinearTransformHelper; TransformHelperFunc ByteIndexedBmBicubicTransformHelper
; TransformHelperFuncs ByteIndexedBmTransformHelperFuncs
;
75
76NativePrimitive ByteIndexedPrimitives[] = {
77 REGISTER_CONVERT_BLIT(IntArgb, ByteIndexed){ & PrimitiveTypes.Blit, & SurfaceTypes.IntArgb, &
CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed, {IntArgbToByteIndexedConvert
}, {IntArgbToByteIndexedConvert}, 0, 0 }
,
78 REGISTER_CONVERT_BLIT_EQUIV(IntRgb, ByteIndexed,{ & PrimitiveTypes.Blit, & SurfaceTypes.IntRgb, &
CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed, {IntArgbToByteIndexedConvert
}, {IntArgbToByteIndexedConvert}, 0, 0 }
79 NAME_CONVERT_BLIT(IntArgb, ByteIndexed)){ & PrimitiveTypes.Blit, & SurfaceTypes.IntRgb, &
CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed, {IntArgbToByteIndexedConvert
}, {IntArgbToByteIndexedConvert}, 0, 0 }
,
80 REGISTER_CONVERT_BLIT_EQUIV(IntArgbBm, ByteIndexed,{ & PrimitiveTypes.Blit, & SurfaceTypes.IntArgbBm, &
CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed, {IntArgbToByteIndexedConvert
}, {IntArgbToByteIndexedConvert}, 0, 0 }
81 NAME_CONVERT_BLIT(IntArgb, ByteIndexed)){ & PrimitiveTypes.Blit, & SurfaceTypes.IntArgbBm, &
CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed, {IntArgbToByteIndexedConvert
}, {IntArgbToByteIndexedConvert}, 0, 0 }
,
82 REGISTER_CONVERT_BLIT(ThreeByteBgr, ByteIndexed){ & PrimitiveTypes.Blit, & SurfaceTypes.ThreeByteBgr,
& CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed
, {ThreeByteBgrToByteIndexedConvert}, {ThreeByteBgrToByteIndexedConvert
}, 0, 0 }
,
83 REGISTER_CONVERT_BLIT(ByteGray, ByteIndexed){ & PrimitiveTypes.Blit, & SurfaceTypes.ByteGray, &
CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed, {ByteGrayToByteIndexedConvert
}, {ByteGrayToByteIndexedConvert}, 0, 0 }
,
84 REGISTER_CONVERT_BLIT(Index12Gray, ByteIndexed){ & PrimitiveTypes.Blit, & SurfaceTypes.Index12Gray, &
CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed, {Index12GrayToByteIndexedConvert
}, {Index12GrayToByteIndexedConvert}, 0, 0 }
,
85 REGISTER_CONVERT_BLIT_FLAGS(ByteIndexed, ByteIndexed, 0, SD_LOCK_LUT){ & PrimitiveTypes.Blit, & SurfaceTypes.ByteIndexed, &
CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed, {ByteIndexedToByteIndexedConvert
}, {ByteIndexedToByteIndexedConvert}, 0, (1 << 2), }
,
86 REGISTER_SCALE_BLIT(IntArgb, ByteIndexed){ & PrimitiveTypes.ScaledBlit, & SurfaceTypes.IntArgb
, & CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed
, {IntArgbToByteIndexedScaleConvert}, {IntArgbToByteIndexedScaleConvert
}, 0, 0 }
,
87 REGISTER_SCALE_BLIT_EQUIV(IntRgb, ByteIndexed,{ & PrimitiveTypes.ScaledBlit, & SurfaceTypes.IntRgb,
& CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed
, {IntArgbToByteIndexedScaleConvert}, {IntArgbToByteIndexedScaleConvert
}, 0, 0 }
88 NAME_SCALE_BLIT(IntArgb, ByteIndexed)){ & PrimitiveTypes.ScaledBlit, & SurfaceTypes.IntRgb,
& CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed
, {IntArgbToByteIndexedScaleConvert}, {IntArgbToByteIndexedScaleConvert
}, 0, 0 }
,
89 REGISTER_SCALE_BLIT_EQUIV(IntArgbBm, ByteIndexed,{ & PrimitiveTypes.ScaledBlit, & SurfaceTypes.IntArgbBm
, & CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed
, {IntArgbToByteIndexedScaleConvert}, {IntArgbToByteIndexedScaleConvert
}, 0, 0 }
90 NAME_SCALE_BLIT(IntArgb, ByteIndexed)){ & PrimitiveTypes.ScaledBlit, & SurfaceTypes.IntArgbBm
, & CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed
, {IntArgbToByteIndexedScaleConvert}, {IntArgbToByteIndexedScaleConvert
}, 0, 0 }
,
91 REGISTER_SCALE_BLIT(ThreeByteBgr, ByteIndexed){ & PrimitiveTypes.ScaledBlit, & SurfaceTypes.ThreeByteBgr
, & CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed
, {ThreeByteBgrToByteIndexedScaleConvert}, {ThreeByteBgrToByteIndexedScaleConvert
}, 0, 0 }
,
92 REGISTER_SCALE_BLIT(ByteGray, ByteIndexed){ & PrimitiveTypes.ScaledBlit, & SurfaceTypes.ByteGray
, & CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed
, {ByteGrayToByteIndexedScaleConvert}, {ByteGrayToByteIndexedScaleConvert
}, 0, 0 }
,
93 REGISTER_SCALE_BLIT(Index12Gray, ByteIndexed){ & PrimitiveTypes.ScaledBlit, & SurfaceTypes.Index12Gray
, & CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed
, {Index12GrayToByteIndexedScaleConvert}, {Index12GrayToByteIndexedScaleConvert
}, 0, 0 }
,
94 REGISTER_SCALE_BLIT_FLAGS(ByteIndexed, ByteIndexed, 0, SD_LOCK_LUT){ & PrimitiveTypes.ScaledBlit, & SurfaceTypes.ByteIndexed
, & CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed
, {ByteIndexedToByteIndexedScaleConvert}, {ByteIndexedToByteIndexedScaleConvert
}, 0, (1 << 2), }
,
95 REGISTER_XPAR_CONVERT_BLIT(ByteIndexedBm, ByteIndexed){ & PrimitiveTypes.Blit, & SurfaceTypes.ByteIndexedBm
, & CompositeTypes.SrcOverBmNoEa, & SurfaceTypes.ByteIndexed
, {ByteIndexedBmToByteIndexedXparOver}, {ByteIndexedBmToByteIndexedXparOver
}, 0, 0 }
,
96 REGISTER_XPAR_SCALE_BLIT(ByteIndexedBm, ByteIndexed){ & PrimitiveTypes.ScaledBlit, & SurfaceTypes.ByteIndexedBm
, & CompositeTypes.SrcOverBmNoEa, & SurfaceTypes.ByteIndexed
, {ByteIndexedBmToByteIndexedScaleXparOver}, {ByteIndexedBmToByteIndexedScaleXparOver
}, 0, 0 }
,
97 REGISTER_XPAR_SCALE_BLIT(IntArgbBm, ByteIndexed){ & PrimitiveTypes.ScaledBlit, & SurfaceTypes.IntArgbBm
, & CompositeTypes.SrcOverBmNoEa, & SurfaceTypes.ByteIndexed
, {IntArgbBmToByteIndexedScaleXparOver}, {IntArgbBmToByteIndexedScaleXparOver
}, 0, 0 }
,
98 REGISTER_XPAR_BLITBG(ByteIndexedBm, ByteIndexed){ & PrimitiveTypes.BlitBg, & SurfaceTypes.ByteIndexedBm
, & CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed
, {ByteIndexedBmToByteIndexedXparBgCopy}, {ByteIndexedBmToByteIndexedXparBgCopy
}, 0, 0 }
,
99 REGISTER_XPAR_CONVERT_BLIT(IntArgbBm, ByteIndexed){ & PrimitiveTypes.Blit, & SurfaceTypes.IntArgbBm, &
CompositeTypes.SrcOverBmNoEa, & SurfaceTypes.ByteIndexed
, {IntArgbBmToByteIndexedXparOver}, {IntArgbBmToByteIndexedXparOver
}, 0, 0 }
,
100 REGISTER_XPAR_BLITBG(IntArgbBm, ByteIndexed){ & PrimitiveTypes.BlitBg, & SurfaceTypes.IntArgbBm, &
CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed, {IntArgbBmToByteIndexedXparBgCopy
}, {IntArgbBmToByteIndexedXparBgCopy}, 0, 0 }
,
101
102 REGISTER_XOR_BLIT(IntArgb, ByteIndexed){ & PrimitiveTypes.Blit, & SurfaceTypes.IntArgb, &
CompositeTypes.Xor, & SurfaceTypes.ByteIndexed, {IntArgbToByteIndexedXorBlit
}, {IntArgbToByteIndexedXorBlit}, 0, 0 }
,
103 REGISTER_ALPHA_MASKFILL(ByteIndexed){ & PrimitiveTypes.MaskFill, & SurfaceTypes.AnyColor,
& CompositeTypes.AnyAlpha, & SurfaceTypes.ByteIndexed
, {ByteIndexedAlphaMaskFill}, {ByteIndexedAlphaMaskFill}, 0, 0
}
,
104 REGISTER_ALPHA_MASKBLIT(IntArgb, ByteIndexed){ & PrimitiveTypes.MaskBlit, & SurfaceTypes.IntArgb, &
CompositeTypes.AnyAlpha, & SurfaceTypes.ByteIndexed, {IntArgbToByteIndexedAlphaMaskBlit
}, {IntArgbToByteIndexedAlphaMaskBlit}, 0, 0 }
,
105 REGISTER_ALPHA_MASKBLIT(IntArgbPre, ByteIndexed){ & PrimitiveTypes.MaskBlit, & SurfaceTypes.IntArgbPre
, & CompositeTypes.AnyAlpha, & SurfaceTypes.ByteIndexed
, {IntArgbPreToByteIndexedAlphaMaskBlit}, {IntArgbPreToByteIndexedAlphaMaskBlit
}, 0, 0 }
,
106 REGISTER_ALPHA_MASKBLIT(IntRgb, ByteIndexed){ & PrimitiveTypes.MaskBlit, & SurfaceTypes.IntRgb, &
CompositeTypes.AnyAlpha, & SurfaceTypes.ByteIndexed, {IntRgbToByteIndexedAlphaMaskBlit
}, {IntRgbToByteIndexedAlphaMaskBlit}, 0, 0 }
,
107 REGISTER_SOLID_DRAWGLYPHLISTAA(ByteIndexed){ & PrimitiveTypes.DrawGlyphListAA, & SurfaceTypes.AnyColor
, & CompositeTypes.SrcNoEa, & SurfaceTypes.ByteIndexed
, {ByteIndexedDrawGlyphListAA}, {ByteIndexedDrawGlyphListAA},
0, 0 }
,
108
109 REGISTER_TRANSFORMHELPER_FUNCS(ByteIndexed){ & PrimitiveTypes.TransformHelper, & SurfaceTypes.ByteIndexed
, & CompositeTypes.SrcNoEa, & SurfaceTypes.IntArgbPre
, {(AnyFunc *) &ByteIndexedTransformHelperFuncs}, {(AnyFunc
*) &ByteIndexedTransformHelperFuncs}, 0, 0 }
,
110 REGISTER_TRANSFORMHELPER_FUNCS(ByteIndexedBm){ & PrimitiveTypes.TransformHelper, & SurfaceTypes.ByteIndexedBm
, & CompositeTypes.SrcNoEa, & SurfaceTypes.IntArgbPre
, {(AnyFunc *) &ByteIndexedBmTransformHelperFuncs}, {(AnyFunc
*) &ByteIndexedBmTransformHelperFuncs}, 0, 0 }
,
111};
112
113jboolean RegisterByteIndexed(JNIEnv *env)
114{
115 return RegisterPrimitives(env, ByteIndexedPrimitives,
116 ArraySize(ByteIndexedPrimitives)(sizeof(ByteIndexedPrimitives) / sizeof(ByteIndexedPrimitives
[0]))
);
117}
118
119jint PixelForByteIndexed(SurfaceDataRasInfo *pRasInfo, jint rgb)
120{
121 jint r, g, b;
122 ExtractIntDcmComponentsX123(rgb, r, g, b)do { (b) = (rgb) & 0xff; (g) = ((rgb) >> 8) & 0xff
; (r) = ((rgb) >> 16) & 0xff; } while (0)
;
123 return SurfaceData_InvColorMap(pRasInfo->invColorTable, r, g, b)(pRasInfo->invColorTable)[((((unsigned char) r) >> 3
)<<10) + ((((unsigned char) g) >> 3)<<5) + (
((unsigned char) b) >> 3)]
;
124}
125
126jboolean checkSameLut(jint *SrcReadLut, jint *DstReadLut,
127 SurfaceDataRasInfo *pSrcInfo,
128 SurfaceDataRasInfo *pDstInfo)
129{
130 if (SrcReadLut != DstReadLut) {
131 juint lutSize = pSrcInfo->lutSize;
132 if (lutSize > pDstInfo->lutSize) {
133 return JNI_FALSE0;
134 } else {
135 juint i;
136 for (i = 0; i < lutSize; i++) {
137 if (SrcReadLut[i] != DstReadLut[i]) {
138 return JNI_FALSE0;
139 }
140 }
141 }
142 }
143 return JNI_TRUE1;
144}
145
146DEFINE_CONVERT_BLIT(IntArgb, ByteIndexed, 3ByteRgb)void IntArgbToByteIndexedConvert(void *srcBase, void *dstBase
, juint width, juint height, SurfaceDataRasInfo *pSrcInfo, SurfaceDataRasInfo
*pDstInfo, NativePrimitive *pPrim, CompositeInfo *pCompInfo)
{ int DstWriteXDither, DstWriteYDither, DstWriteRepPrims; char
*DstWritererr, *DstWritegerr, *DstWriteberr; unsigned char *
DstWriteInvLut; ; do { IntArgbDataType *pSrc = (IntArgbDataType
*) (srcBase); ByteIndexedDataType *pDst = (ByteIndexedDataType
*) (dstBase); jint srcScan = (pSrcInfo)->scanStride; jint
dstScan = (pDstInfo)->scanStride; do { do { DstWriteYDither
= (((pDstInfo)->bounds.y1 & 7) << 3); } while (
0); DstWriteInvLut = (pDstInfo)->invColorTable; DstWriteRepPrims
= (pDstInfo)->representsPrimaries; } while (0); srcScan -=
(width) * 4; dstScan -= (width) * 1; do { juint w = width; do
{ DstWritererr = (pDstInfo)->redErrTable + DstWriteYDither
; DstWritegerr = (pDstInfo)->grnErrTable + DstWriteYDither
; DstWriteberr = (pDstInfo)->bluErrTable + DstWriteYDither
; DstWriteXDither = ((pDstInfo)->bounds.x1 & 7); } while
(0);; do { do { jint r, g, b; do { jint pixel = (pSrc)[0]; do
{ (b) = (pixel) & 0xff; (g) = ((pixel) >> 8) &
0xff; (r) = ((pixel) >> 16) & 0xff; } while (0); }
while (0); do { if (!(((r == 0) || (r == 255)) && ((
g == 0) || (g == 255)) && ((b == 0) || (b == 255)) &&
DstWriteRepPrims)) { r += DstWritererr[DstWriteXDither]; g +=
DstWritegerr[DstWriteXDither]; b += DstWriteberr[DstWriteXDither
]; } do { if (((r|g|b) >> 8) != 0) { do { if (((r) >>
8) != 0) {r = (~(r >> 31)) & 255; } } while (0); do
{ if (((g) >> 8) != 0) {g = (~(g >> 31)) & 255
; } } while (0); do { if (((b) >> 8) != 0) {b = (~(b >>
31)) & 255; } } while (0); } } while (0); (pDst)[0] = (DstWriteInvLut
)[((((unsigned char) r) >> 3)<<10) + ((((unsigned
char) g) >> 3)<<5) + (((unsigned char) b) >>
3)]; } while (0); } while (0); pSrc = ((void *) (((intptr_t)
(pSrc)) + (4))); pDst = ((void *) (((intptr_t) (pDst)) + (1)
)); DstWriteXDither = (DstWriteXDither + 1) & 7; } while (
--w > 0); pSrc = ((void *) (((intptr_t) (pSrc)) + (srcScan
))); pDst = ((void *) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither
= (DstWriteYDither + (1 << 3)) & (7 << 3); }
while (--height > 0); } while (0); }
147
148DEFINE_CONVERT_BLIT(ThreeByteBgr, ByteIndexed, 3ByteRgb)void ThreeByteBgrToByteIndexedConvert(void *srcBase, void *dstBase
, juint width, juint height, SurfaceDataRasInfo *pSrcInfo, SurfaceDataRasInfo
*pDstInfo, NativePrimitive *pPrim, CompositeInfo *pCompInfo)
{ int DstWriteXDither, DstWriteYDither, DstWriteRepPrims; char
*DstWritererr, *DstWritegerr, *DstWriteberr; unsigned char *
DstWriteInvLut; ; do { ThreeByteBgrDataType *pSrc = (ThreeByteBgrDataType
*) (srcBase); ByteIndexedDataType *pDst = (ByteIndexedDataType
*) (dstBase); jint srcScan = (pSrcInfo)->scanStride; jint
dstScan = (pDstInfo)->scanStride; do { do { DstWriteYDither
= (((pDstInfo)->bounds.y1 & 7) << 3); } while (
0); DstWriteInvLut = (pDstInfo)->invColorTable; DstWriteRepPrims
= (pDstInfo)->representsPrimaries; } while (0); srcScan -=
(width) * 3; dstScan -= (width) * 1; do { juint w = width; do
{ DstWritererr = (pDstInfo)->redErrTable + DstWriteYDither
; DstWritegerr = (pDstInfo)->grnErrTable + DstWriteYDither
; DstWriteberr = (pDstInfo)->bluErrTable + DstWriteYDither
; DstWriteXDither = ((pDstInfo)->bounds.x1 & 7); } while
(0);; do { do { jint r, g, b; do { (b) = (pSrc)[3*(0)+0]; (g
) = (pSrc)[3*(0)+1]; (r) = (pSrc)[3*(0)+2]; } while (0); do {
if (!(((r == 0) || (r == 255)) && ((g == 0) || (g ==
255)) && ((b == 0) || (b == 255)) && DstWriteRepPrims
)) { r += DstWritererr[DstWriteXDither]; g += DstWritegerr[DstWriteXDither
]; b += DstWriteberr[DstWriteXDither]; } do { if (((r|g|b) >>
8) != 0) { do { if (((r) >> 8) != 0) {r = (~(r >>
31)) & 255; } } while (0); do { if (((g) >> 8) != 0
) {g = (~(g >> 31)) & 255; } } while (0); do { if (
((b) >> 8) != 0) {b = (~(b >> 31)) & 255; } }
while (0); } } while (0); (pDst)[0] = (DstWriteInvLut)[((((unsigned
char) r) >> 3)<<10) + ((((unsigned char) g) >>
3)<<5) + (((unsigned char) b) >> 3)]; } while (0
); } while (0); pSrc = ((void *) (((intptr_t) (pSrc)) + (3)))
; pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; } while (--w > 0); pSrc =
((void *) (((intptr_t) (pSrc)) + (srcScan))); pDst = ((void *
) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither
+ (1 << 3)) & (7 << 3); } while (--height >
0); } while (0); }
149
150DEFINE_CONVERT_BLIT(ByteGray, ByteIndexed, 3ByteRgb)void ByteGrayToByteIndexedConvert(void *srcBase, void *dstBase
, juint width, juint height, SurfaceDataRasInfo *pSrcInfo, SurfaceDataRasInfo
*pDstInfo, NativePrimitive *pPrim, CompositeInfo *pCompInfo)
{ int DstWriteXDither, DstWriteYDither, DstWriteRepPrims; char
*DstWritererr, *DstWritegerr, *DstWriteberr; unsigned char *
DstWriteInvLut; ; do { ByteGrayDataType *pSrc = (ByteGrayDataType
*) (srcBase); ByteIndexedDataType *pDst = (ByteIndexedDataType
*) (dstBase); jint srcScan = (pSrcInfo)->scanStride; jint
dstScan = (pDstInfo)->scanStride; do { do { DstWriteYDither
= (((pDstInfo)->bounds.y1 & 7) << 3); } while (
0); DstWriteInvLut = (pDstInfo)->invColorTable; DstWriteRepPrims
= (pDstInfo)->representsPrimaries; } while (0); srcScan -=
(width) * 1; dstScan -= (width) * 1; do { juint w = width; do
{ DstWritererr = (pDstInfo)->redErrTable + DstWriteYDither
; DstWritegerr = (pDstInfo)->grnErrTable + DstWriteYDither
; DstWriteberr = (pDstInfo)->bluErrTable + DstWriteYDither
; DstWriteXDither = ((pDstInfo)->bounds.x1 & 7); } while
(0);; do { do { jint r, g, b; ((r) = (g) = (b) = (pSrc)[0]);
do { if (!(((r == 0) || (r == 255)) && ((g == 0) || (
g == 255)) && ((b == 0) || (b == 255)) && DstWriteRepPrims
)) { r += DstWritererr[DstWriteXDither]; g += DstWritegerr[DstWriteXDither
]; b += DstWriteberr[DstWriteXDither]; } do { if (((r|g|b) >>
8) != 0) { do { if (((r) >> 8) != 0) {r = (~(r >>
31)) & 255; } } while (0); do { if (((g) >> 8) != 0
) {g = (~(g >> 31)) & 255; } } while (0); do { if (
((b) >> 8) != 0) {b = (~(b >> 31)) & 255; } }
while (0); } } while (0); (pDst)[0] = (DstWriteInvLut)[((((unsigned
char) r) >> 3)<<10) + ((((unsigned char) g) >>
3)<<5) + (((unsigned char) b) >> 3)]; } while (0
); } while (0); pSrc = ((void *) (((intptr_t) (pSrc)) + (1)))
; pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; } while (--w > 0); pSrc =
((void *) (((intptr_t) (pSrc)) + (srcScan))); pDst = ((void *
) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither
+ (1 << 3)) & (7 << 3); } while (--height >
0); } while (0); }
151
152DEFINE_CONVERT_BLIT(Index12Gray, ByteIndexed, 3ByteRgb)void Index12GrayToByteIndexedConvert(void *srcBase, void *dstBase
, juint width, juint height, SurfaceDataRasInfo *pSrcInfo, SurfaceDataRasInfo
*pDstInfo, NativePrimitive *pPrim, CompositeInfo *pCompInfo)
{ jint *SrcReadLut; int DstWriteXDither, DstWriteYDither, DstWriteRepPrims
; char *DstWritererr, *DstWritegerr, *DstWriteberr; unsigned char
*DstWriteInvLut; SrcReadLut = (pSrcInfo)->lutBase; do { Index12GrayDataType
*pSrc = (Index12GrayDataType *) (srcBase); ByteIndexedDataType
*pDst = (ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo
)->scanStride; jint dstScan = (pDstInfo)->scanStride; do
{ do { DstWriteYDither = (((pDstInfo)->bounds.y1 & 7)
<< 3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); srcScan -= (width) * 2; dstScan -= (width) * 1; do { juint
w = width; do { DstWritererr = (pDstInfo)->redErrTable + DstWriteYDither
; DstWritegerr = (pDstInfo)->grnErrTable + DstWriteYDither
; DstWriteberr = (pDstInfo)->bluErrTable + DstWriteYDither
; DstWriteXDither = ((pDstInfo)->bounds.x1 & 7); } while
(0);; do { do { jint r, g, b; r = g = b = (jubyte)SrcReadLut
[pSrc[0] & 0xfff]; do { if (!(((r == 0) || (r == 255)) &&
((g == 0) || (g == 255)) && ((b == 0) || (b == 255))
&& DstWriteRepPrims)) { r += DstWritererr[DstWriteXDither
]; g += DstWritegerr[DstWriteXDither]; b += DstWriteberr[DstWriteXDither
]; } do { if (((r|g|b) >> 8) != 0) { do { if (((r) >>
8) != 0) {r = (~(r >> 31)) & 255; } } while (0); do
{ if (((g) >> 8) != 0) {g = (~(g >> 31)) & 255
; } } while (0); do { if (((b) >> 8) != 0) {b = (~(b >>
31)) & 255; } } while (0); } } while (0); (pDst)[0] = (DstWriteInvLut
)[((((unsigned char) r) >> 3)<<10) + ((((unsigned
char) g) >> 3)<<5) + (((unsigned char) b) >>
3)]; } while (0); } while (0); pSrc = ((void *) (((intptr_t)
(pSrc)) + (2))); pDst = ((void *) (((intptr_t) (pDst)) + (1)
)); DstWriteXDither = (DstWriteXDither + 1) & 7; } while (
--w > 0); pSrc = ((void *) (((intptr_t) (pSrc)) + (srcScan
))); pDst = ((void *) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither
= (DstWriteYDither + (1 << 3)) & (7 << 3); }
while (--height > 0); } while (0); }
153
154void NAME_CONVERT_BLIT(ByteIndexed, ByteIndexed)ByteIndexedToByteIndexedConvert
155 (void *srcBase, void *dstBase,
156 juint width, juint height,
157 SurfaceDataRasInfo *pSrcInfo,
158 SurfaceDataRasInfo *pDstInfo,
159 NativePrimitive *pPrim,
160 CompositeInfo *pCompInfo)
161{
162 DeclareByteIndexedLoadVars(SrcRead)jint *SrcReadLut;
163 DeclareByteIndexedLoadVars(DstRead)jint *DstReadLut;
164 jint srcScan = pSrcInfo->scanStride;
165 jint dstScan = pDstInfo->scanStride;
166
167 InitByteIndexedLoadVars(SrcRead, pSrcInfo)SrcReadLut = (pSrcInfo)->lutBase;
168 InitByteIndexedLoadVars(DstRead, pDstInfo)DstReadLut = (pDstInfo)->lutBase;
169
170 if (checkSameLut(SrcReadLut, DstReadLut, pSrcInfo, pDstInfo)) {
171 do {
172 memcpy(dstBase, srcBase, width);
173 srcBase = PtrAddBytes(srcBase, srcScan)((void *) (((intptr_t) (srcBase)) + (srcScan)));
174 dstBase = PtrAddBytes(dstBase, dstScan)((void *) (((intptr_t) (dstBase)) + (dstScan)));
175 } while (--height > 0);
176 } else {
177 DeclareByteIndexedStoreVars(DstWrite)int DstWriteXDither, DstWriteYDither, DstWriteRepPrims; char *
DstWritererr, *DstWritegerr, *DstWriteberr; unsigned char *DstWriteInvLut
;
;
178
179 BlitLoopWidthHeight(ByteIndexed, pSrc, srcBase, pSrcInfo,do { ByteIndexedDataType *pSrc = (ByteIndexedDataType *) (srcBase
); ByteIndexedDataType *pDst = (ByteIndexedDataType *) (dstBase
); jint srcScan = (pSrcInfo)->scanStride; jint dstScan = (
pDstInfo)->scanStride; do { do { DstWriteYDither = (((pDstInfo
)->bounds.y1 & 7) << 3); } while (0); DstWriteInvLut
= (pDstInfo)->invColorTable; DstWriteRepPrims = (pDstInfo
)->representsPrimaries; } while (0); srcScan -= (width) * 1
; dstScan -= (width) * 1; do { juint w = width; do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { do {
jint r, g, b; do { jint rgb = SrcReadLut[pSrc[0]]; do { (b) =
(rgb) & 0xff; (g) = ((rgb) >> 8) & 0xff; (r) =
((rgb) >> 16) & 0xff; } while (0); } while (0); do
{ if (!(((r == 0) || (r == 255)) && ((g == 0) || (g ==
255)) && ((b == 0) || (b == 255)) && DstWriteRepPrims
)) { r += DstWritererr[DstWriteXDither]; g += DstWritegerr[DstWriteXDither
]; b += DstWriteberr[DstWriteXDither]; } do { if (((r|g|b) >>
8) != 0) { do { if (((r) >> 8) != 0) {r = (~(r >>
31)) & 255; } } while (0); do { if (((g) >> 8) != 0
) {g = (~(g >> 31)) & 255; } } while (0); do { if (
((b) >> 8) != 0) {b = (~(b >> 31)) & 255; } }
while (0); } } while (0); (pDst)[0] = (DstWriteInvLut)[((((unsigned
char) r) >> 3)<<10) + ((((unsigned char) g) >>
3)<<5) + (((unsigned char) b) >> 3)]; } while (0
); } while (0); pSrc = ((void *) (((intptr_t) (pSrc)) + (1)))
; pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; } while (--w > 0); pSrc =
((void *) (((intptr_t) (pSrc)) + (srcScan))); pDst = ((void *
) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither
+ (1 << 3)) & (7 << 3); } while (--height >
0); } while (0)
180 ByteIndexed, pDst, dstBase, pDstInfo, DstWrite,do { ByteIndexedDataType *pSrc = (ByteIndexedDataType *) (srcBase
); ByteIndexedDataType *pDst = (ByteIndexedDataType *) (dstBase
); jint srcScan = (pSrcInfo)->scanStride; jint dstScan = (
pDstInfo)->scanStride; do { do { DstWriteYDither = (((pDstInfo
)->bounds.y1 & 7) << 3); } while (0); DstWriteInvLut
= (pDstInfo)->invColorTable; DstWriteRepPrims = (pDstInfo
)->representsPrimaries; } while (0); srcScan -= (width) * 1
; dstScan -= (width) * 1; do { juint w = width; do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { do {
jint r, g, b; do { jint rgb = SrcReadLut[pSrc[0]]; do { (b) =
(rgb) & 0xff; (g) = ((rgb) >> 8) & 0xff; (r) =
((rgb) >> 16) & 0xff; } while (0); } while (0); do
{ if (!(((r == 0) || (r == 255)) && ((g == 0) || (g ==
255)) && ((b == 0) || (b == 255)) && DstWriteRepPrims
)) { r += DstWritererr[DstWriteXDither]; g += DstWritegerr[DstWriteXDither
]; b += DstWriteberr[DstWriteXDither]; } do { if (((r|g|b) >>
8) != 0) { do { if (((r) >> 8) != 0) {r = (~(r >>
31)) & 255; } } while (0); do { if (((g) >> 8) != 0
) {g = (~(g >> 31)) & 255; } } while (0); do { if (
((b) >> 8) != 0) {b = (~(b >> 31)) & 255; } }
while (0); } } while (0); (pDst)[0] = (DstWriteInvLut)[((((unsigned
char) r) >> 3)<<10) + ((((unsigned char) g) >>
3)<<5) + (((unsigned char) b) >> 3)]; } while (0
); } while (0); pSrc = ((void *) (((intptr_t) (pSrc)) + (1)))
; pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; } while (--w > 0); pSrc =
((void *) (((intptr_t) (pSrc)) + (srcScan))); pDst = ((void *
) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither
+ (1 << 3)) & (7 << 3); } while (--height >
0); } while (0)
181 width, height,do { ByteIndexedDataType *pSrc = (ByteIndexedDataType *) (srcBase
); ByteIndexedDataType *pDst = (ByteIndexedDataType *) (dstBase
); jint srcScan = (pSrcInfo)->scanStride; jint dstScan = (
pDstInfo)->scanStride; do { do { DstWriteYDither = (((pDstInfo
)->bounds.y1 & 7) << 3); } while (0); DstWriteInvLut
= (pDstInfo)->invColorTable; DstWriteRepPrims = (pDstInfo
)->representsPrimaries; } while (0); srcScan -= (width) * 1
; dstScan -= (width) * 1; do { juint w = width; do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { do {
jint r, g, b; do { jint rgb = SrcReadLut[pSrc[0]]; do { (b) =
(rgb) & 0xff; (g) = ((rgb) >> 8) & 0xff; (r) =
((rgb) >> 16) & 0xff; } while (0); } while (0); do
{ if (!(((r == 0) || (r == 255)) && ((g == 0) || (g ==
255)) && ((b == 0) || (b == 255)) && DstWriteRepPrims
)) { r += DstWritererr[DstWriteXDither]; g += DstWritegerr[DstWriteXDither
]; b += DstWriteberr[DstWriteXDither]; } do { if (((r|g|b) >>
8) != 0) { do { if (((r) >> 8) != 0) {r = (~(r >>
31)) & 255; } } while (0); do { if (((g) >> 8) != 0
) {g = (~(g >> 31)) & 255; } } while (0); do { if (
((b) >> 8) != 0) {b = (~(b >> 31)) & 255; } }
while (0); } } while (0); (pDst)[0] = (DstWriteInvLut)[((((unsigned
char) r) >> 3)<<10) + ((((unsigned char) g) >>
3)<<5) + (((unsigned char) b) >> 3)]; } while (0
); } while (0); pSrc = ((void *) (((intptr_t) (pSrc)) + (1)))
; pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; } while (--w > 0); pSrc =
((void *) (((intptr_t) (pSrc)) + (srcScan))); pDst = ((void *
) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither
+ (1 << 3)) & (7 << 3); } while (--height >
0); } while (0)
182 ConvertVia3ByteRgbdo { ByteIndexedDataType *pSrc = (ByteIndexedDataType *) (srcBase
); ByteIndexedDataType *pDst = (ByteIndexedDataType *) (dstBase
); jint srcScan = (pSrcInfo)->scanStride; jint dstScan = (
pDstInfo)->scanStride; do { do { DstWriteYDither = (((pDstInfo
)->bounds.y1 & 7) << 3); } while (0); DstWriteInvLut
= (pDstInfo)->invColorTable; DstWriteRepPrims = (pDstInfo
)->representsPrimaries; } while (0); srcScan -= (width) * 1
; dstScan -= (width) * 1; do { juint w = width; do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { do {
jint r, g, b; do { jint rgb = SrcReadLut[pSrc[0]]; do { (b) =
(rgb) & 0xff; (g) = ((rgb) >> 8) & 0xff; (r) =
((rgb) >> 16) & 0xff; } while (0); } while (0); do
{ if (!(((r == 0) || (r == 255)) && ((g == 0) || (g ==
255)) && ((b == 0) || (b == 255)) && DstWriteRepPrims
)) { r += DstWritererr[DstWriteXDither]; g += DstWritegerr[DstWriteXDither
]; b += DstWriteberr[DstWriteXDither]; } do { if (((r|g|b) >>
8) != 0) { do { if (((r) >> 8) != 0) {r = (~(r >>
31)) & 255; } } while (0); do { if (((g) >> 8) != 0
) {g = (~(g >> 31)) & 255; } } while (0); do { if (
((b) >> 8) != 0) {b = (~(b >> 31)) & 255; } }
while (0); } } while (0); (pDst)[0] = (DstWriteInvLut)[((((unsigned
char) r) >> 3)<<10) + ((((unsigned char) g) >>
3)<<5) + (((unsigned char) b) >> 3)]; } while (0
); } while (0); pSrc = ((void *) (((intptr_t) (pSrc)) + (1)))
; pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; } while (--w > 0); pSrc =
((void *) (((intptr_t) (pSrc)) + (srcScan))); pDst = ((void *
) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither
+ (1 << 3)) & (7 << 3); } while (--height >
0); } while (0)
183 (pSrc, ByteIndexed, SrcRead,do { ByteIndexedDataType *pSrc = (ByteIndexedDataType *) (srcBase
); ByteIndexedDataType *pDst = (ByteIndexedDataType *) (dstBase
); jint srcScan = (pSrcInfo)->scanStride; jint dstScan = (
pDstInfo)->scanStride; do { do { DstWriteYDither = (((pDstInfo
)->bounds.y1 & 7) << 3); } while (0); DstWriteInvLut
= (pDstInfo)->invColorTable; DstWriteRepPrims = (pDstInfo
)->representsPrimaries; } while (0); srcScan -= (width) * 1
; dstScan -= (width) * 1; do { juint w = width; do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { do {
jint r, g, b; do { jint rgb = SrcReadLut[pSrc[0]]; do { (b) =
(rgb) & 0xff; (g) = ((rgb) >> 8) & 0xff; (r) =
((rgb) >> 16) & 0xff; } while (0); } while (0); do
{ if (!(((r == 0) || (r == 255)) && ((g == 0) || (g ==
255)) && ((b == 0) || (b == 255)) && DstWriteRepPrims
)) { r += DstWritererr[DstWriteXDither]; g += DstWritegerr[DstWriteXDither
]; b += DstWriteberr[DstWriteXDither]; } do { if (((r|g|b) >>
8) != 0) { do { if (((r) >> 8) != 0) {r = (~(r >>
31)) & 255; } } while (0); do { if (((g) >> 8) != 0
) {g = (~(g >> 31)) & 255; } } while (0); do { if (
((b) >> 8) != 0) {b = (~(b >> 31)) & 255; } }
while (0); } } while (0); (pDst)[0] = (DstWriteInvLut)[((((unsigned
char) r) >> 3)<<10) + ((((unsigned char) g) >>
3)<<5) + (((unsigned char) b) >> 3)]; } while (0
); } while (0); pSrc = ((void *) (((intptr_t) (pSrc)) + (1)))
; pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; } while (--w > 0); pSrc =
((void *) (((intptr_t) (pSrc)) + (srcScan))); pDst = ((void *
) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither
+ (1 << 3)) & (7 << 3); } while (--height >
0); } while (0)
184 pDst, ByteIndexed, DstWrite, 0, 0))do { ByteIndexedDataType *pSrc = (ByteIndexedDataType *) (srcBase
); ByteIndexedDataType *pDst = (ByteIndexedDataType *) (dstBase
); jint srcScan = (pSrcInfo)->scanStride; jint dstScan = (
pDstInfo)->scanStride; do { do { DstWriteYDither = (((pDstInfo
)->bounds.y1 & 7) << 3); } while (0); DstWriteInvLut
= (pDstInfo)->invColorTable; DstWriteRepPrims = (pDstInfo
)->representsPrimaries; } while (0); srcScan -= (width) * 1
; dstScan -= (width) * 1; do { juint w = width; do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { do {
jint r, g, b; do { jint rgb = SrcReadLut[pSrc[0]]; do { (b) =
(rgb) & 0xff; (g) = ((rgb) >> 8) & 0xff; (r) =
((rgb) >> 16) & 0xff; } while (0); } while (0); do
{ if (!(((r == 0) || (r == 255)) && ((g == 0) || (g ==
255)) && ((b == 0) || (b == 255)) && DstWriteRepPrims
)) { r += DstWritererr[DstWriteXDither]; g += DstWritegerr[DstWriteXDither
]; b += DstWriteberr[DstWriteXDither]; } do { if (((r|g|b) >>
8) != 0) { do { if (((r) >> 8) != 0) {r = (~(r >>
31)) & 255; } } while (0); do { if (((g) >> 8) != 0
) {g = (~(g >> 31)) & 255; } } while (0); do { if (
((b) >> 8) != 0) {b = (~(b >> 31)) & 255; } }
while (0); } } while (0); (pDst)[0] = (DstWriteInvLut)[((((unsigned
char) r) >> 3)<<10) + ((((unsigned char) g) >>
3)<<5) + (((unsigned char) b) >> 3)]; } while (0
); } while (0); pSrc = ((void *) (((intptr_t) (pSrc)) + (1)))
; pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; } while (--w > 0); pSrc =
((void *) (((intptr_t) (pSrc)) + (srcScan))); pDst = ((void *
) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither
+ (1 << 3)) & (7 << 3); } while (--height >
0); } while (0)
;
185 }
186}
187
188DEFINE_SCALE_BLIT(IntArgb, ByteIndexed, 3ByteRgb)void IntArgbToByteIndexedScaleConvert(void *srcBase, void *dstBase
, juint width, juint height, jint sxloc, jint syloc, jint sxinc
, jint syinc, jint shift, SurfaceDataRasInfo *pSrcInfo, SurfaceDataRasInfo
*pDstInfo, NativePrimitive *pPrim, CompositeInfo *pCompInfo)
{ int DstWriteXDither, DstWriteYDither, DstWriteRepPrims; char
*DstWritererr, *DstWritegerr, *DstWriteberr; unsigned char *
DstWriteInvLut; ; do { IntArgbDataType *pSrc; ByteIndexedDataType
*pDst = (ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo
)->scanStride; jint dstScan = (pDstInfo)->scanStride; do
{ do { DstWriteYDither = (((pDstInfo)->bounds.y1 & 7)
<< 3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); do { jint r, g, b; do { jint pixel
= (pSrc)[x]; do { (b) = (pixel) & 0xff; (g) = ((pixel) >>
8) & 0xff; (r) = ((pixel) >> 16) & 0xff; } while
(0); } while (0); do { if (!(((r == 0) || (r == 255)) &&
((g == 0) || (g == 255)) && ((b == 0) || (b == 255))
&& DstWriteRepPrims)) { r += DstWritererr[DstWriteXDither
]; g += DstWritegerr[DstWriteXDither]; b += DstWriteberr[DstWriteXDither
]; } do { if (((r|g|b) >> 8) != 0) { do { if (((r) >>
8) != 0) {r = (~(r >> 31)) & 255; } } while (0); do
{ if (((g) >> 8) != 0) {g = (~(g >> 31)) & 255
; } } while (0); do { if (((b) >> 8) != 0) {b = (~(b >>
31)) & 255; } } while (0); } } while (0); (pDst)[0] = (DstWriteInvLut
)[((((unsigned char) r) >> 3)<<10) + ((((unsigned
char) g) >> 3)<<5) + (((unsigned char) b) >>
3)]; } while (0); } while (0); pDst = ((void *) (((intptr_t)
(pDst)) + (1))); DstWriteXDither = (DstWriteXDither + 1) &
7; tmpsxloc += sxinc; } while (--w > 0); pDst = ((void *)
(((intptr_t) (pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither
+ (1 << 3)) & (7 << 3); syloc += syinc; } while
(--height > 0); } while (0); }
189
190DEFINE_SCALE_BLIT(ThreeByteBgr, ByteIndexed, 3ByteRgb)void ThreeByteBgrToByteIndexedScaleConvert(void *srcBase, void
*dstBase, juint width, juint height, jint sxloc, jint syloc,
jint sxinc, jint syinc, jint shift, SurfaceDataRasInfo *pSrcInfo
, SurfaceDataRasInfo *pDstInfo, NativePrimitive *pPrim, CompositeInfo
*pCompInfo) { int DstWriteXDither, DstWriteYDither, DstWriteRepPrims
; char *DstWritererr, *DstWritegerr, *DstWriteberr; unsigned char
*DstWriteInvLut; ; do { ThreeByteBgrDataType *pSrc; ByteIndexedDataType
*pDst = (ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo
)->scanStride; jint dstScan = (pDstInfo)->scanStride; do
{ do { DstWriteYDither = (((pDstInfo)->bounds.y1 & 7)
<< 3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); do { jint r, g, b; do { (b) =
(pSrc)[3*(x)+0]; (g) = (pSrc)[3*(x)+1]; (r) = (pSrc)[3*(x)+2
]; } while (0); do { if (!(((r == 0) || (r == 255)) &&
((g == 0) || (g == 255)) && ((b == 0) || (b == 255))
&& DstWriteRepPrims)) { r += DstWritererr[DstWriteXDither
]; g += DstWritegerr[DstWriteXDither]; b += DstWriteberr[DstWriteXDither
]; } do { if (((r|g|b) >> 8) != 0) { do { if (((r) >>
8) != 0) {r = (~(r >> 31)) & 255; } } while (0); do
{ if (((g) >> 8) != 0) {g = (~(g >> 31)) & 255
; } } while (0); do { if (((b) >> 8) != 0) {b = (~(b >>
31)) & 255; } } while (0); } } while (0); (pDst)[0] = (DstWriteInvLut
)[((((unsigned char) r) >> 3)<<10) + ((((unsigned
char) g) >> 3)<<5) + (((unsigned char) b) >>
3)]; } while (0); } while (0); pDst = ((void *) (((intptr_t)
(pDst)) + (1))); DstWriteXDither = (DstWriteXDither + 1) &
7; tmpsxloc += sxinc; } while (--w > 0); pDst = ((void *)
(((intptr_t) (pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither
+ (1 << 3)) & (7 << 3); syloc += syinc; } while
(--height > 0); } while (0); }
191
192DEFINE_SCALE_BLIT(ByteGray, ByteIndexed, 3ByteRgb)void ByteGrayToByteIndexedScaleConvert(void *srcBase, void *dstBase
, juint width, juint height, jint sxloc, jint syloc, jint sxinc
, jint syinc, jint shift, SurfaceDataRasInfo *pSrcInfo, SurfaceDataRasInfo
*pDstInfo, NativePrimitive *pPrim, CompositeInfo *pCompInfo)
{ int DstWriteXDither, DstWriteYDither, DstWriteRepPrims; char
*DstWritererr, *DstWritegerr, *DstWriteberr; unsigned char *
DstWriteInvLut; ; do { ByteGrayDataType *pSrc; ByteIndexedDataType
*pDst = (ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo
)->scanStride; jint dstScan = (pDstInfo)->scanStride; do
{ do { DstWriteYDither = (((pDstInfo)->bounds.y1 & 7)
<< 3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); do { jint r, g, b; ((r) = (g)
= (b) = (pSrc)[x]); do { if (!(((r == 0) || (r == 255)) &&
((g == 0) || (g == 255)) && ((b == 0) || (b == 255))
&& DstWriteRepPrims)) { r += DstWritererr[DstWriteXDither
]; g += DstWritegerr[DstWriteXDither]; b += DstWriteberr[DstWriteXDither
]; } do { if (((r|g|b) >> 8) != 0) { do { if (((r) >>
8) != 0) {r = (~(r >> 31)) & 255; } } while (0); do
{ if (((g) >> 8) != 0) {g = (~(g >> 31)) & 255
; } } while (0); do { if (((b) >> 8) != 0) {b = (~(b >>
31)) & 255; } } while (0); } } while (0); (pDst)[0] = (DstWriteInvLut
)[((((unsigned char) r) >> 3)<<10) + ((((unsigned
char) g) >> 3)<<5) + (((unsigned char) b) >>
3)]; } while (0); } while (0); pDst = ((void *) (((intptr_t)
(pDst)) + (1))); DstWriteXDither = (DstWriteXDither + 1) &
7; tmpsxloc += sxinc; } while (--w > 0); pDst = ((void *)
(((intptr_t) (pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither
+ (1 << 3)) & (7 << 3); syloc += syinc; } while
(--height > 0); } while (0); }
193
194DEFINE_SCALE_BLIT(Index12Gray, ByteIndexed, 3ByteRgb)void Index12GrayToByteIndexedScaleConvert(void *srcBase, void
*dstBase, juint width, juint height, jint sxloc, jint syloc,
jint sxinc, jint syinc, jint shift, SurfaceDataRasInfo *pSrcInfo
, SurfaceDataRasInfo *pDstInfo, NativePrimitive *pPrim, CompositeInfo
*pCompInfo) { jint *SrcReadLut; int DstWriteXDither, DstWriteYDither
, DstWriteRepPrims; char *DstWritererr, *DstWritegerr, *DstWriteberr
; unsigned char *DstWriteInvLut; SrcReadLut = (pSrcInfo)->
lutBase; do { Index12GrayDataType *pSrc; ByteIndexedDataType *
pDst = (ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo
)->scanStride; jint dstScan = (pDstInfo)->scanStride; do
{ do { DstWriteYDither = (((pDstInfo)->bounds.y1 & 7)
<< 3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); do { jint r, g, b; r = g = b =
(jubyte)SrcReadLut[pSrc[x] & 0xfff]; do { if (!(((r == 0
) || (r == 255)) && ((g == 0) || (g == 255)) &&
((b == 0) || (b == 255)) && DstWriteRepPrims)) { r +=
DstWritererr[DstWriteXDither]; g += DstWritegerr[DstWriteXDither
]; b += DstWriteberr[DstWriteXDither]; } do { if (((r|g|b) >>
8) != 0) { do { if (((r) >> 8) != 0) {r = (~(r >>
31)) & 255; } } while (0); do { if (((g) >> 8) != 0
) {g = (~(g >> 31)) & 255; } } while (0); do { if (
((b) >> 8) != 0) {b = (~(b >> 31)) & 255; } }
while (0); } } while (0); (pDst)[0] = (DstWriteInvLut)[((((unsigned
char) r) >> 3)<<10) + ((((unsigned char) g) >>
3)<<5) + (((unsigned char) b) >> 3)]; } while (0
); } while (0); pDst = ((void *) (((intptr_t) (pDst)) + (1)))
; DstWriteXDither = (DstWriteXDither + 1) & 7; tmpsxloc +=
sxinc; } while (--w > 0); pDst = ((void *) (((intptr_t) (
pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither + (1
<< 3)) & (7 << 3); syloc += syinc; } while (
--height > 0); } while (0); }
195
196void NAME_SCALE_BLIT(ByteIndexed, ByteIndexed)ByteIndexedToByteIndexedScaleConvert
197 (void *srcBase, void *dstBase,
198 juint width, juint height,
199 jint sxloc, jint syloc,
200 jint sxinc, jint syinc, jint shift,
201 SurfaceDataRasInfo *pSrcInfo,
202 SurfaceDataRasInfo *pDstInfo,
203 NativePrimitive *pPrim,
204 CompositeInfo *pCompInfo)
205{
206 DeclareByteIndexedLoadVars(SrcRead)jint *SrcReadLut;
207 DeclareByteIndexedLoadVars(DstRead)jint *DstReadLut;
208 jint srcScan = pSrcInfo->scanStride;
209 jint dstScan = pDstInfo->scanStride;
Value stored to 'dstScan' during its initialization is never read
210 DeclareByteIndexedStoreVars(DstWrite)int DstWriteXDither, DstWriteYDither, DstWriteRepPrims; char *
DstWritererr, *DstWritegerr, *DstWriteberr; unsigned char *DstWriteInvLut
;
211
212 InitByteIndexedLoadVars(SrcRead, pSrcInfo)SrcReadLut = (pSrcInfo)->lutBase;
213 InitByteIndexedLoadVars(DstRead, pDstInfo)DstReadLut = (pDstInfo)->lutBase;
214
215 if (checkSameLut(SrcReadLut, DstReadLut, pSrcInfo, pDstInfo)) {
216 BlitLoopScaleWidthHeight(ByteIndexed, pSrc, srcBase, pSrcInfo,do { ByteIndexedDataType *pSrc; ByteIndexedDataType *pDst = (
ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo)->
scanStride; jint dstScan = (pDstInfo)->scanStride; do { do
{ DstWriteYDither = (((pDstInfo)->bounds.y1 & 7) <<
3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); pDst[0] = pSrc[x]; pDst = ((void
*) (((intptr_t) (pDst)) + (1))); DstWriteXDither = (DstWriteXDither
+ 1) & 7; tmpsxloc += sxinc; } while (--w > 0); pDst =
((void *) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither
= (DstWriteYDither + (1 << 3)) & (7 << 3); syloc
+= syinc; } while (--height > 0); } while (0)
217 ByteIndexed, pDst, dstBase, pDstInfo, DstWrite,do { ByteIndexedDataType *pSrc; ByteIndexedDataType *pDst = (
ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo)->
scanStride; jint dstScan = (pDstInfo)->scanStride; do { do
{ DstWriteYDither = (((pDstInfo)->bounds.y1 & 7) <<
3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); pDst[0] = pSrc[x]; pDst = ((void
*) (((intptr_t) (pDst)) + (1))); DstWriteXDither = (DstWriteXDither
+ 1) & 7; tmpsxloc += sxinc; } while (--w > 0); pDst =
((void *) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither
= (DstWriteYDither + (1 << 3)) & (7 << 3); syloc
+= syinc; } while (--height > 0); } while (0)
218 x, width, height,do { ByteIndexedDataType *pSrc; ByteIndexedDataType *pDst = (
ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo)->
scanStride; jint dstScan = (pDstInfo)->scanStride; do { do
{ DstWriteYDither = (((pDstInfo)->bounds.y1 & 7) <<
3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); pDst[0] = pSrc[x]; pDst = ((void
*) (((intptr_t) (pDst)) + (1))); DstWriteXDither = (DstWriteXDither
+ 1) & 7; tmpsxloc += sxinc; } while (--w > 0); pDst =
((void *) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither
= (DstWriteYDither + (1 << 3)) & (7 << 3); syloc
+= syinc; } while (--height > 0); } while (0)
219 sxloc, syloc, sxinc, syinc, shift,do { ByteIndexedDataType *pSrc; ByteIndexedDataType *pDst = (
ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo)->
scanStride; jint dstScan = (pDstInfo)->scanStride; do { do
{ DstWriteYDither = (((pDstInfo)->bounds.y1 & 7) <<
3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); pDst[0] = pSrc[x]; pDst = ((void
*) (((intptr_t) (pDst)) + (1))); DstWriteXDither = (DstWriteXDither
+ 1) & 7; tmpsxloc += sxinc; } while (--w > 0); pDst =
((void *) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither
= (DstWriteYDither + (1 << 3)) & (7 << 3); syloc
+= syinc; } while (--height > 0); } while (0)
220 pDst[0] = pSrc[x])do { ByteIndexedDataType *pSrc; ByteIndexedDataType *pDst = (
ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo)->
scanStride; jint dstScan = (pDstInfo)->scanStride; do { do
{ DstWriteYDither = (((pDstInfo)->bounds.y1 & 7) <<
3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); pDst[0] = pSrc[x]; pDst = ((void
*) (((intptr_t) (pDst)) + (1))); DstWriteXDither = (DstWriteXDither
+ 1) & 7; tmpsxloc += sxinc; } while (--w > 0); pDst =
((void *) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither
= (DstWriteYDither + (1 << 3)) & (7 << 3); syloc
+= syinc; } while (--height > 0); } while (0)
;
221 } else {
222 BlitLoopScaleWidthHeight(ByteIndexed, pSrc, srcBase, pSrcInfo,do { ByteIndexedDataType *pSrc; ByteIndexedDataType *pDst = (
ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo)->
scanStride; jint dstScan = (pDstInfo)->scanStride; do { do
{ DstWriteYDither = (((pDstInfo)->bounds.y1 & 7) <<
3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); do { jint r, g, b; do { jint rgb
= SrcReadLut[pSrc[x]]; do { (b) = (rgb) & 0xff; (g) = ((
rgb) >> 8) & 0xff; (r) = ((rgb) >> 16) & 0xff
; } while (0); } while (0); do { if (!(((r == 0) || (r == 255
)) && ((g == 0) || (g == 255)) && ((b == 0) ||
(b == 255)) && DstWriteRepPrims)) { r += DstWritererr
[DstWriteXDither]; g += DstWritegerr[DstWriteXDither]; b += DstWriteberr
[DstWriteXDither]; } do { if (((r|g|b) >> 8) != 0) { do
{ if (((r) >> 8) != 0) {r = (~(r >> 31)) & 255
; } } while (0); do { if (((g) >> 8) != 0) {g = (~(g >>
31)) & 255; } } while (0); do { if (((b) >> 8) != 0
) {b = (~(b >> 31)) & 255; } } while (0); } } while
(0); (pDst)[0] = (DstWriteInvLut)[((((unsigned char) r) >>
3)<<10) + ((((unsigned char) g) >> 3)<<5) +
(((unsigned char) b) >> 3)]; } while (0); } while (0);
pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; tmpsxloc += sxinc; } while (
--w > 0); pDst = ((void *) (((intptr_t) (pDst)) + (dstScan
))); DstWriteYDither = (DstWriteYDither + (1 << 3)) &
(7 << 3); syloc += syinc; } while (--height > 0); }
while (0)
223 ByteIndexed, pDst, dstBase, pDstInfo, DstWrite,do { ByteIndexedDataType *pSrc; ByteIndexedDataType *pDst = (
ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo)->
scanStride; jint dstScan = (pDstInfo)->scanStride; do { do
{ DstWriteYDither = (((pDstInfo)->bounds.y1 & 7) <<
3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); do { jint r, g, b; do { jint rgb
= SrcReadLut[pSrc[x]]; do { (b) = (rgb) & 0xff; (g) = ((
rgb) >> 8) & 0xff; (r) = ((rgb) >> 16) & 0xff
; } while (0); } while (0); do { if (!(((r == 0) || (r == 255
)) && ((g == 0) || (g == 255)) && ((b == 0) ||
(b == 255)) && DstWriteRepPrims)) { r += DstWritererr
[DstWriteXDither]; g += DstWritegerr[DstWriteXDither]; b += DstWriteberr
[DstWriteXDither]; } do { if (((r|g|b) >> 8) != 0) { do
{ if (((r) >> 8) != 0) {r = (~(r >> 31)) & 255
; } } while (0); do { if (((g) >> 8) != 0) {g = (~(g >>
31)) & 255; } } while (0); do { if (((b) >> 8) != 0
) {b = (~(b >> 31)) & 255; } } while (0); } } while
(0); (pDst)[0] = (DstWriteInvLut)[((((unsigned char) r) >>
3)<<10) + ((((unsigned char) g) >> 3)<<5) +
(((unsigned char) b) >> 3)]; } while (0); } while (0);
pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; tmpsxloc += sxinc; } while (
--w > 0); pDst = ((void *) (((intptr_t) (pDst)) + (dstScan
))); DstWriteYDither = (DstWriteYDither + (1 << 3)) &
(7 << 3); syloc += syinc; } while (--height > 0); }
while (0)
224 x, width, height,do { ByteIndexedDataType *pSrc; ByteIndexedDataType *pDst = (
ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo)->
scanStride; jint dstScan = (pDstInfo)->scanStride; do { do
{ DstWriteYDither = (((pDstInfo)->bounds.y1 & 7) <<
3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); do { jint r, g, b; do { jint rgb
= SrcReadLut[pSrc[x]]; do { (b) = (rgb) & 0xff; (g) = ((
rgb) >> 8) & 0xff; (r) = ((rgb) >> 16) & 0xff
; } while (0); } while (0); do { if (!(((r == 0) || (r == 255
)) && ((g == 0) || (g == 255)) && ((b == 0) ||
(b == 255)) && DstWriteRepPrims)) { r += DstWritererr
[DstWriteXDither]; g += DstWritegerr[DstWriteXDither]; b += DstWriteberr
[DstWriteXDither]; } do { if (((r|g|b) >> 8) != 0) { do
{ if (((r) >> 8) != 0) {r = (~(r >> 31)) & 255
; } } while (0); do { if (((g) >> 8) != 0) {g = (~(g >>
31)) & 255; } } while (0); do { if (((b) >> 8) != 0
) {b = (~(b >> 31)) & 255; } } while (0); } } while
(0); (pDst)[0] = (DstWriteInvLut)[((((unsigned char) r) >>
3)<<10) + ((((unsigned char) g) >> 3)<<5) +
(((unsigned char) b) >> 3)]; } while (0); } while (0);
pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; tmpsxloc += sxinc; } while (
--w > 0); pDst = ((void *) (((intptr_t) (pDst)) + (dstScan
))); DstWriteYDither = (DstWriteYDither + (1 << 3)) &
(7 << 3); syloc += syinc; } while (--height > 0); }
while (0)
225 sxloc, syloc, sxinc, syinc, shift,do { ByteIndexedDataType *pSrc; ByteIndexedDataType *pDst = (
ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo)->
scanStride; jint dstScan = (pDstInfo)->scanStride; do { do
{ DstWriteYDither = (((pDstInfo)->bounds.y1 & 7) <<
3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); do { jint r, g, b; do { jint rgb
= SrcReadLut[pSrc[x]]; do { (b) = (rgb) & 0xff; (g) = ((
rgb) >> 8) & 0xff; (r) = ((rgb) >> 16) & 0xff
; } while (0); } while (0); do { if (!(((r == 0) || (r == 255
)) && ((g == 0) || (g == 255)) && ((b == 0) ||
(b == 255)) && DstWriteRepPrims)) { r += DstWritererr
[DstWriteXDither]; g += DstWritegerr[DstWriteXDither]; b += DstWriteberr
[DstWriteXDither]; } do { if (((r|g|b) >> 8) != 0) { do
{ if (((r) >> 8) != 0) {r = (~(r >> 31)) & 255
; } } while (0); do { if (((g) >> 8) != 0) {g = (~(g >>
31)) & 255; } } while (0); do { if (((b) >> 8) != 0
) {b = (~(b >> 31)) & 255; } } while (0); } } while
(0); (pDst)[0] = (DstWriteInvLut)[((((unsigned char) r) >>
3)<<10) + ((((unsigned char) g) >> 3)<<5) +
(((unsigned char) b) >> 3)]; } while (0); } while (0);
pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; tmpsxloc += sxinc; } while (
--w > 0); pDst = ((void *) (((intptr_t) (pDst)) + (dstScan
))); DstWriteYDither = (DstWriteYDither + (1 << 3)) &
(7 << 3); syloc += syinc; } while (--height > 0); }
while (0)
226 ConvertVia3ByteRgb(pSrc, ByteIndexed, SrcRead,do { ByteIndexedDataType *pSrc; ByteIndexedDataType *pDst = (
ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo)->
scanStride; jint dstScan = (pDstInfo)->scanStride; do { do
{ DstWriteYDither = (((pDstInfo)->bounds.y1 & 7) <<
3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); do { jint r, g, b; do { jint rgb
= SrcReadLut[pSrc[x]]; do { (b) = (rgb) & 0xff; (g) = ((
rgb) >> 8) & 0xff; (r) = ((rgb) >> 16) & 0xff
; } while (0); } while (0); do { if (!(((r == 0) || (r == 255
)) && ((g == 0) || (g == 255)) && ((b == 0) ||
(b == 255)) && DstWriteRepPrims)) { r += DstWritererr
[DstWriteXDither]; g += DstWritegerr[DstWriteXDither]; b += DstWriteberr
[DstWriteXDither]; } do { if (((r|g|b) >> 8) != 0) { do
{ if (((r) >> 8) != 0) {r = (~(r >> 31)) & 255
; } } while (0); do { if (((g) >> 8) != 0) {g = (~(g >>
31)) & 255; } } while (0); do { if (((b) >> 8) != 0
) {b = (~(b >> 31)) & 255; } } while (0); } } while
(0); (pDst)[0] = (DstWriteInvLut)[((((unsigned char) r) >>
3)<<10) + ((((unsigned char) g) >> 3)<<5) +
(((unsigned char) b) >> 3)]; } while (0); } while (0);
pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; tmpsxloc += sxinc; } while (
--w > 0); pDst = ((void *) (((intptr_t) (pDst)) + (dstScan
))); DstWriteYDither = (DstWriteYDither + (1 << 3)) &
(7 << 3); syloc += syinc; } while (--height > 0); }
while (0)
227 pDst, ByteIndexed, DstWrite,do { ByteIndexedDataType *pSrc; ByteIndexedDataType *pDst = (
ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo)->
scanStride; jint dstScan = (pDstInfo)->scanStride; do { do
{ DstWriteYDither = (((pDstInfo)->bounds.y1 & 7) <<
3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); do { jint r, g, b; do { jint rgb
= SrcReadLut[pSrc[x]]; do { (b) = (rgb) & 0xff; (g) = ((
rgb) >> 8) & 0xff; (r) = ((rgb) >> 16) & 0xff
; } while (0); } while (0); do { if (!(((r == 0) || (r == 255
)) && ((g == 0) || (g == 255)) && ((b == 0) ||
(b == 255)) && DstWriteRepPrims)) { r += DstWritererr
[DstWriteXDither]; g += DstWritegerr[DstWriteXDither]; b += DstWriteberr
[DstWriteXDither]; } do { if (((r|g|b) >> 8) != 0) { do
{ if (((r) >> 8) != 0) {r = (~(r >> 31)) & 255
; } } while (0); do { if (((g) >> 8) != 0) {g = (~(g >>
31)) & 255; } } while (0); do { if (((b) >> 8) != 0
) {b = (~(b >> 31)) & 255; } } while (0); } } while
(0); (pDst)[0] = (DstWriteInvLut)[((((unsigned char) r) >>
3)<<10) + ((((unsigned char) g) >> 3)<<5) +
(((unsigned char) b) >> 3)]; } while (0); } while (0);
pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; tmpsxloc += sxinc; } while (
--w > 0); pDst = ((void *) (((intptr_t) (pDst)) + (dstScan
))); DstWriteYDither = (DstWriteYDither + (1 << 3)) &
(7 << 3); syloc += syinc; } while (--height > 0); }
while (0)
228 x, 0))do { ByteIndexedDataType *pSrc; ByteIndexedDataType *pDst = (
ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo)->
scanStride; jint dstScan = (pDstInfo)->scanStride; do { do
{ DstWriteYDither = (((pDstInfo)->bounds.y1 & 7) <<
3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); do { jint r, g, b; do { jint rgb
= SrcReadLut[pSrc[x]]; do { (b) = (rgb) & 0xff; (g) = ((
rgb) >> 8) & 0xff; (r) = ((rgb) >> 16) & 0xff
; } while (0); } while (0); do { if (!(((r == 0) || (r == 255
)) && ((g == 0) || (g == 255)) && ((b == 0) ||
(b == 255)) && DstWriteRepPrims)) { r += DstWritererr
[DstWriteXDither]; g += DstWritegerr[DstWriteXDither]; b += DstWriteberr
[DstWriteXDither]; } do { if (((r|g|b) >> 8) != 0) { do
{ if (((r) >> 8) != 0) {r = (~(r >> 31)) & 255
; } } while (0); do { if (((g) >> 8) != 0) {g = (~(g >>
31)) & 255; } } while (0); do { if (((b) >> 8) != 0
) {b = (~(b >> 31)) & 255; } } while (0); } } while
(0); (pDst)[0] = (DstWriteInvLut)[((((unsigned char) r) >>
3)<<10) + ((((unsigned char) g) >> 3)<<5) +
(((unsigned char) b) >> 3)]; } while (0); } while (0);
pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; tmpsxloc += sxinc; } while (
--w > 0); pDst = ((void *) (((intptr_t) (pDst)) + (dstScan
))); DstWriteYDither = (DstWriteYDither + (1 << 3)) &
(7 << 3); syloc += syinc; } while (--height > 0); }
while (0)
;
229 }
230}
231
232DEFINE_XPAR_CONVERT_BLIT_LUT8(ByteIndexedBm, ByteIndexed, ConvertOnTheFly)void ByteIndexedBmToByteIndexedXparOver(void *srcBase, void *
dstBase, juint width, juint height, SurfaceDataRasInfo *pSrcInfo
, SurfaceDataRasInfo *pDstInfo, NativePrimitive *pPrim, CompositeInfo
*pCompInfo) { int DstWriteXDither, DstWriteYDither, DstWriteRepPrims
; char *DstWritererr, *DstWritegerr, *DstWriteberr; unsigned char
*DstWriteInvLut; jint *pixLutLut; pixLutLut = (pSrcInfo)->
lutBase; do { ByteIndexedBmDataType *pSrc = (ByteIndexedBmDataType
*) (srcBase); ByteIndexedDataType *pDst = (ByteIndexedDataType
*) (dstBase); jint srcScan = (pSrcInfo)->scanStride; jint
dstScan = (pDstInfo)->scanStride; do { do { DstWriteYDither
= (((pDstInfo)->bounds.y1 & 7) << 3); } while (
0); DstWriteInvLut = (pDstInfo)->invColorTable; DstWriteRepPrims
= (pDstInfo)->representsPrimaries; } while (0); srcScan -=
(width) * 1; dstScan -= (width) * 1; do { juint w = width; do
{ DstWritererr = (pDstInfo)->redErrTable + DstWriteYDither
; DstWritegerr = (pDstInfo)->grnErrTable + DstWriteYDither
; DstWriteberr = (pDstInfo)->bluErrTable + DstWriteYDither
; DstWriteXDither = ((pDstInfo)->bounds.x1 & 7); } while
(0);; do { do { jint argb; (argb) = pixLutLut[pSrc[0]]; if (
argb < 0) { do { int r, g, b; do { (b) = (argb) & 0xff
; (g) = ((argb) >> 8) & 0xff; (r) = ((argb) >>
16) & 0xff; } while (0); do { if (!(((r == 0) || (r == 255
)) && ((g == 0) || (g == 255)) && ((b == 0) ||
(b == 255)) && DstWriteRepPrims)) { r += DstWritererr
[DstWriteXDither]; g += DstWritegerr[DstWriteXDither]; b += DstWriteberr
[DstWriteXDither]; } do { if (((r|g|b) >> 8) != 0) { do
{ if (((r) >> 8) != 0) {r = (~(r >> 31)) & 255
; } } while (0); do { if (((g) >> 8) != 0) {g = (~(g >>
31)) & 255; } } while (0); do { if (((b) >> 8) != 0
) {b = (~(b >> 31)) & 255; } } while (0); } } while
(0); (pDst)[0] = (DstWriteInvLut)[((((unsigned char) r) >>
3)<<10) + ((((unsigned char) g) >> 3)<<5) +
(((unsigned char) b) >> 3)]; } while (0); } while (0);
} } while (0); pSrc = ((void *) (((intptr_t) (pSrc)) + (1)))
; pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; } while (--w > 0); pSrc =
((void *) (((intptr_t) (pSrc)) + (srcScan))); pDst = ((void *
) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither
+ (1 << 3)) & (7 << 3); } while (--height >
0); } while (0); }
233
234DEFINE_XPAR_SCALE_BLIT_LUT8(ByteIndexedBm, ByteIndexed, ConvertOnTheFly)void ByteIndexedBmToByteIndexedScaleXparOver(void *srcBase, void
*dstBase, juint width, juint height, jint sxloc, jint syloc,
jint sxinc, jint syinc, jint shift, SurfaceDataRasInfo *pSrcInfo
, SurfaceDataRasInfo *pDstInfo, NativePrimitive *pPrim, CompositeInfo
*pCompInfo) { int DstWriteXDither, DstWriteYDither, DstWriteRepPrims
; char *DstWritererr, *DstWritegerr, *DstWriteberr; unsigned char
*DstWriteInvLut; jint *pixLutLut; pixLutLut = (pSrcInfo)->
lutBase; do { ByteIndexedBmDataType *pSrc; ByteIndexedDataType
*pDst = (ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo
)->scanStride; jint dstScan = (pDstInfo)->scanStride; do
{ do { DstWriteYDither = (((pDstInfo)->bounds.y1 & 7)
<< 3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); do { jint argb; (argb) = pixLutLut
[pSrc[x]]; if (argb < 0) { do { int r, g, b; do { (b) = (argb
) & 0xff; (g) = ((argb) >> 8) & 0xff; (r) = ((argb
) >> 16) & 0xff; } while (0); do { if (!(((r == 0) ||
(r == 255)) && ((g == 0) || (g == 255)) && (
(b == 0) || (b == 255)) && DstWriteRepPrims)) { r += DstWritererr
[DstWriteXDither]; g += DstWritegerr[DstWriteXDither]; b += DstWriteberr
[DstWriteXDither]; } do { if (((r|g|b) >> 8) != 0) { do
{ if (((r) >> 8) != 0) {r = (~(r >> 31)) & 255
; } } while (0); do { if (((g) >> 8) != 0) {g = (~(g >>
31)) & 255; } } while (0); do { if (((b) >> 8) != 0
) {b = (~(b >> 31)) & 255; } } while (0); } } while
(0); (pDst)[0] = (DstWriteInvLut)[((((unsigned char) r) >>
3)<<10) + ((((unsigned char) g) >> 3)<<5) +
(((unsigned char) b) >> 3)]; } while (0); } while (0);
} } while (0); pDst = ((void *) (((intptr_t) (pDst)) + (1)))
; DstWriteXDither = (DstWriteXDither + 1) & 7; tmpsxloc +=
sxinc; } while (--w > 0); pDst = ((void *) (((intptr_t) (
pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither + (1
<< 3)) & (7 << 3); syloc += syinc; } while (
--height > 0); } while (0); }
235
236DEFINE_XPAR_SCALE_BLIT(IntArgbBm, ByteIndexed, 1IntRgb)void IntArgbBmToByteIndexedScaleXparOver(void *srcBase, void *
dstBase, juint width, juint height, jint sxloc, jint syloc, jint
sxinc, jint syinc, jint shift, SurfaceDataRasInfo *pSrcInfo,
SurfaceDataRasInfo *pDstInfo, NativePrimitive *pPrim, CompositeInfo
*pCompInfo) { int DstWriteXDither, DstWriteYDither, DstWriteRepPrims
; char *DstWritererr, *DstWritegerr, *DstWriteberr; unsigned char
*DstWriteInvLut; ; do { IntArgbBmDataType *pSrc; ByteIndexedDataType
*pDst = (ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo
)->scanStride; jint dstScan = (pDstInfo)->scanStride; do
{ do { DstWriteYDither = (((pDstInfo)->bounds.y1 & 7)
<< 3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); dstScan -= (width) * 1; do { juint w = width; jint tmpsxloc
= sxloc; pSrc = ((void *) (((intptr_t) (srcBase)) + (((intptr_t
) ((syloc >> shift))) * (srcScan)))); do { DstWritererr
= (pDstInfo)->redErrTable + DstWriteYDither; DstWritegerr
= (pDstInfo)->grnErrTable + DstWriteYDither; DstWriteberr
= (pDstInfo)->bluErrTable + DstWriteYDither; DstWriteXDither
= ((pDstInfo)->bounds.x1 & 7); } while (0);; do { jint
x = (tmpsxloc >> shift); do { jint XparLoad;; (XparLoad
) = (pSrc)[x]; if (! ((((XparLoad) >> 24) == 0))) { int
rgb; (rgb) = (XparLoad); do { int r, g, b; do { (b) = (rgb) &
0xff; (g) = ((rgb) >> 8) & 0xff; (r) = ((rgb) >>
16) & 0xff; } while (0); do { if (!(((r == 0) || (r == 255
)) && ((g == 0) || (g == 255)) && ((b == 0) ||
(b == 255)) && DstWriteRepPrims)) { r += DstWritererr
[DstWriteXDither]; g += DstWritegerr[DstWriteXDither]; b += DstWriteberr
[DstWriteXDither]; } do { if (((r|g|b) >> 8) != 0) { do
{ if (((r) >> 8) != 0) {r = (~(r >> 31)) & 255
; } } while (0); do { if (((g) >> 8) != 0) {g = (~(g >>
31)) & 255; } } while (0); do { if (((b) >> 8) != 0
) {b = (~(b >> 31)) & 255; } } while (0); } } while
(0); (pDst)[0] = (DstWriteInvLut)[((((unsigned char) r) >>
3)<<10) + ((((unsigned char) g) >> 3)<<5) +
(((unsigned char) b) >> 3)]; } while (0); } while (0);
} } while (0); pDst = ((void *) (((intptr_t) (pDst)) + (1)))
; DstWriteXDither = (DstWriteXDither + 1) & 7; tmpsxloc +=
sxinc; } while (--w > 0); pDst = ((void *) (((intptr_t) (
pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither + (1
<< 3)) & (7 << 3); syloc += syinc; } while (
--height > 0); } while (0); }
237
238DEFINE_XPAR_BLITBG_LUT8(ByteIndexedBm, ByteIndexed, ConvertOnTheFly)void ByteIndexedBmToByteIndexedXparBgCopy(void *srcBase, void
*dstBase, juint width, juint height, jint bgpixel, SurfaceDataRasInfo
*pSrcInfo, SurfaceDataRasInfo *pDstInfo, NativePrimitive *pPrim
, CompositeInfo *pCompInfo) { int DstWriteXDither, DstWriteYDither
, DstWriteRepPrims; char *DstWritererr, *DstWritegerr, *DstWriteberr
; unsigned char *DstWriteInvLut; jint *pixLutLut; ; do { pixLutLut
= (pSrcInfo)->lutBase; ; } while (0); do { ByteIndexedBmDataType
*pSrc = (ByteIndexedBmDataType *) (srcBase); ByteIndexedDataType
*pDst = (ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo
)->scanStride; jint dstScan = (pDstInfo)->scanStride; do
{ do { DstWriteYDither = (((pDstInfo)->bounds.y1 & 7)
<< 3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); srcScan -= (width) * 1; dstScan -= (width) * 1; do { juint
w = width; do { DstWritererr = (pDstInfo)->redErrTable + DstWriteYDither
; DstWritegerr = (pDstInfo)->grnErrTable + DstWriteYDither
; DstWriteberr = (pDstInfo)->bluErrTable + DstWriteYDither
; DstWriteXDither = ((pDstInfo)->bounds.x1 & 7); } while
(0);; do { do { jint argb; (argb) = pixLutLut[pSrc[0]]; if (
argb < 0) { do { int r, g, b; do { (b) = (argb) & 0xff
; (g) = ((argb) >> 8) & 0xff; (r) = ((argb) >>
16) & 0xff; } while (0); do { if (!(((r == 0) || (r == 255
)) && ((g == 0) || (g == 255)) && ((b == 0) ||
(b == 255)) && DstWriteRepPrims)) { r += DstWritererr
[DstWriteXDither]; g += DstWritegerr[DstWriteXDither]; b += DstWriteberr
[DstWriteXDither]; } do { if (((r|g|b) >> 8) != 0) { do
{ if (((r) >> 8) != 0) {r = (~(r >> 31)) & 255
; } } while (0); do { if (((g) >> 8) != 0) {g = (~(g >>
31)) & 255; } } while (0); do { if (((b) >> 8) != 0
) {b = (~(b >> 31)) & 255; } } while (0); } } while
(0); (pDst)[0] = (DstWriteInvLut)[((((unsigned char) r) >>
3)<<10) + ((((unsigned char) g) >> 3)<<5) +
(((unsigned char) b) >> 3)]; } while (0); } while (0);
} else { (pDst)[0] = (jubyte) (bgpixel); } } while (0); pSrc
= ((void *) (((intptr_t) (pSrc)) + (1))); pDst = ((void *) (
((intptr_t) (pDst)) + (1))); DstWriteXDither = (DstWriteXDither
+ 1) & 7; } while (--w > 0); pSrc = ((void *) (((intptr_t
) (pSrc)) + (srcScan))); pDst = ((void *) (((intptr_t) (pDst)
) + (dstScan))); DstWriteYDither = (DstWriteYDither + (1 <<
3)) & (7 << 3); } while (--height > 0); } while
(0); }
239
240DEFINE_XPAR_CONVERT_BLIT(IntArgbBm, ByteIndexed, 1IntRgb)void IntArgbBmToByteIndexedXparOver(void *srcBase, void *dstBase
, juint width, juint height, SurfaceDataRasInfo *pSrcInfo, SurfaceDataRasInfo
*pDstInfo, NativePrimitive *pPrim, CompositeInfo *pCompInfo)
{ int DstWriteXDither, DstWriteYDither, DstWriteRepPrims; char
*DstWritererr, *DstWritegerr, *DstWriteberr; unsigned char *
DstWriteInvLut; ; do { IntArgbBmDataType *pSrc = (IntArgbBmDataType
*) (srcBase); ByteIndexedDataType *pDst = (ByteIndexedDataType
*) (dstBase); jint srcScan = (pSrcInfo)->scanStride; jint
dstScan = (pDstInfo)->scanStride; do { do { DstWriteYDither
= (((pDstInfo)->bounds.y1 & 7) << 3); } while (
0); DstWriteInvLut = (pDstInfo)->invColorTable; DstWriteRepPrims
= (pDstInfo)->representsPrimaries; } while (0); srcScan -=
(width) * 4; dstScan -= (width) * 1; do { juint w = width; do
{ DstWritererr = (pDstInfo)->redErrTable + DstWriteYDither
; DstWritegerr = (pDstInfo)->grnErrTable + DstWriteYDither
; DstWriteberr = (pDstInfo)->bluErrTable + DstWriteYDither
; DstWriteXDither = ((pDstInfo)->bounds.x1 & 7); } while
(0);; do { do { jint XparLoad;; (XparLoad) = (pSrc)[0]; if (
! ((((XparLoad) >> 24) == 0))) { int rgb; (rgb) = (XparLoad
); do { int r, g, b; do { (b) = (rgb) & 0xff; (g) = ((rgb
) >> 8) & 0xff; (r) = ((rgb) >> 16) & 0xff
; } while (0); do { if (!(((r == 0) || (r == 255)) &&
((g == 0) || (g == 255)) && ((b == 0) || (b == 255))
&& DstWriteRepPrims)) { r += DstWritererr[DstWriteXDither
]; g += DstWritegerr[DstWriteXDither]; b += DstWriteberr[DstWriteXDither
]; } do { if (((r|g|b) >> 8) != 0) { do { if (((r) >>
8) != 0) {r = (~(r >> 31)) & 255; } } while (0); do
{ if (((g) >> 8) != 0) {g = (~(g >> 31)) & 255
; } } while (0); do { if (((b) >> 8) != 0) {b = (~(b >>
31)) & 255; } } while (0); } } while (0); (pDst)[0] = (DstWriteInvLut
)[((((unsigned char) r) >> 3)<<10) + ((((unsigned
char) g) >> 3)<<5) + (((unsigned char) b) >>
3)]; } while (0); } while (0); } } while (0); pSrc = ((void *
) (((intptr_t) (pSrc)) + (4))); pDst = ((void *) (((intptr_t)
(pDst)) + (1))); DstWriteXDither = (DstWriteXDither + 1) &
7; } while (--w > 0); pSrc = ((void *) (((intptr_t) (pSrc
)) + (srcScan))); pDst = ((void *) (((intptr_t) (pDst)) + (dstScan
))); DstWriteYDither = (DstWriteYDither + (1 << 3)) &
(7 << 3); } while (--height > 0); } while (0); }
241
242DEFINE_XPAR_BLITBG(IntArgbBm, ByteIndexed, 1IntRgb)void IntArgbBmToByteIndexedXparBgCopy(void *srcBase, void *dstBase
, juint width, juint height, jint bgpixel, SurfaceDataRasInfo
*pSrcInfo, SurfaceDataRasInfo *pDstInfo, NativePrimitive *pPrim
, CompositeInfo *pCompInfo) { int DstWriteXDither, DstWriteYDither
, DstWriteRepPrims; char *DstWritererr, *DstWritegerr, *DstWriteberr
; unsigned char *DstWriteInvLut; ; do { IntArgbBmDataType *pSrc
= (IntArgbBmDataType *) (srcBase); ByteIndexedDataType *pDst
= (ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo
)->scanStride; jint dstScan = (pDstInfo)->scanStride; do
{ do { DstWriteYDither = (((pDstInfo)->bounds.y1 & 7)
<< 3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); srcScan -= (width) * 4; dstScan -= (width) * 1; do { juint
w = width; do { DstWritererr = (pDstInfo)->redErrTable + DstWriteYDither
; DstWritegerr = (pDstInfo)->grnErrTable + DstWriteYDither
; DstWriteberr = (pDstInfo)->bluErrTable + DstWriteYDither
; DstWriteXDither = ((pDstInfo)->bounds.x1 & 7); } while
(0);; do { do { jint XparLoad;; (XparLoad) = (pSrc)[0]; if (
(((XparLoad) >> 24) == 0)) { (pDst)[0] = (jubyte) (bgpixel
); } else { int rgb; (rgb) = (XparLoad); do { int r, g, b; do
{ (b) = (rgb) & 0xff; (g) = ((rgb) >> 8) & 0xff
; (r) = ((rgb) >> 16) & 0xff; } while (0); do { if (
!(((r == 0) || (r == 255)) && ((g == 0) || (g == 255)
) && ((b == 0) || (b == 255)) && DstWriteRepPrims
)) { r += DstWritererr[DstWriteXDither]; g += DstWritegerr[DstWriteXDither
]; b += DstWriteberr[DstWriteXDither]; } do { if (((r|g|b) >>
8) != 0) { do { if (((r) >> 8) != 0) {r = (~(r >>
31)) & 255; } } while (0); do { if (((g) >> 8) != 0
) {g = (~(g >> 31)) & 255; } } while (0); do { if (
((b) >> 8) != 0) {b = (~(b >> 31)) & 255; } }
while (0); } } while (0); (pDst)[0] = (DstWriteInvLut)[((((unsigned
char) r) >> 3)<<10) + ((((unsigned char) g) >>
3)<<5) + (((unsigned char) b) >> 3)]; } while (0
); } while (0); } } while (0); pSrc = ((void *) (((intptr_t) (
pSrc)) + (4))); pDst = ((void *) (((intptr_t) (pDst)) + (1)))
; DstWriteXDither = (DstWriteXDither + 1) & 7; } while (--
w > 0); pSrc = ((void *) (((intptr_t) (pSrc)) + (srcScan))
); pDst = ((void *) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither
= (DstWriteYDither + (1 << 3)) & (7 << 3); }
while (--height > 0); } while (0); }
243
244DEFINE_XOR_BLIT(IntArgb, ByteIndexed, AnyByte)void IntArgbToByteIndexedXorBlit(void *srcBase, void *dstBase
, juint width, juint height, SurfaceDataRasInfo *pSrcInfo, SurfaceDataRasInfo
*pDstInfo, NativePrimitive *pPrim, CompositeInfo *pCompInfo)
{ jint xorpixel = pCompInfo->details.xorPixel; juint alphamask
= pCompInfo->alphaMask; int DstWriteXDither, DstWriteYDither
, DstWriteRepPrims; char *DstWritererr, *DstWritegerr, *DstWriteberr
; unsigned char *DstWriteInvLut; ; ; ; do { IntArgbDataType *
pSrc = (IntArgbDataType *) (srcBase); ByteIndexedDataType *pDst
= (ByteIndexedDataType *) (dstBase); jint srcScan = (pSrcInfo
)->scanStride; jint dstScan = (pDstInfo)->scanStride; do
{ do { DstWriteYDither = (((pDstInfo)->bounds.y1 & 7)
<< 3); } while (0); DstWriteInvLut = (pDstInfo)->invColorTable
; DstWriteRepPrims = (pDstInfo)->representsPrimaries; } while
(0); srcScan -= (width) * 4; dstScan -= (width) * 1; do { juint
w = width; do { DstWritererr = (pDstInfo)->redErrTable + DstWriteYDither
; DstWritegerr = (pDstInfo)->grnErrTable + DstWriteYDither
; DstWriteberr = (pDstInfo)->bluErrTable + DstWriteYDither
; DstWriteXDither = ((pDstInfo)->bounds.x1 & 7); } while
(0);; do { do { jint srcpixel; (srcpixel) = (pSrc)[0]; if ((
((jint) srcpixel) >= 0)) { break; } do { jint r, g, b; do {
(b) = (srcpixel) & 0xff; (g) = ((srcpixel) >> 8) &
0xff; (r) = ((srcpixel) >> 16) & 0xff; } while (0)
; (srcpixel) = ((pDstInfo)->invColorTable)[((((unsigned char
) r) >> 3)<<10) + ((((unsigned char) g) >> 3
)<<5) + (((unsigned char) b) >> 3)]; } while (0);
; (pDst)[0] ^= (((srcpixel) ^ (xorpixel)) & ~(alphamask)
); } while (0); pSrc = ((void *) (((intptr_t) (pSrc)) + (4)))
; pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; } while (--w > 0); pSrc =
((void *) (((intptr_t) (pSrc)) + (srcScan))); pDst = ((void *
) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither
+ (1 << 3)) & (7 << 3); } while (--height >
0); } while (0); }
245
246DEFINE_ALPHA_MASKFILL(ByteIndexed, 4ByteArgb)void ByteIndexedAlphaMaskFill (void *rasBase, jubyte *pMask, jint
maskOff, jint maskScan, jint width, jint height, jint fgColor
, SurfaceDataRasInfo *pRasInfo, NativePrimitive *pPrim, CompositeInfo
*pCompInfo) { jint pathA = 0xff; jint srcA; jint srcR, srcG,
srcB; jint dstA = 0; jint dstF; jint dstFbase; jint rasScan =
pRasInfo->scanStride; jboolean loaddst; ByteIndexedDataType
*pRas = (ByteIndexedDataType *) (rasBase); jint *DstPixLut; jint
DstPixrgb; int DstWriteXDither, DstWriteYDither, DstWriteRepPrims
; char *DstWritererr, *DstWritegerr, *DstWriteberr; unsigned char
*DstWriteInvLut; jint SrcOpAnd, SrcOpXor, SrcOpAdd; jint DstOpAnd
, DstOpXor, DstOpAdd; do { (srcB) = (fgColor) & 0xff; (srcG
) = ((fgColor) >> 8) & 0xff; (srcR) = ((fgColor) >>
16) & 0xff; (srcA) = ((fgColor) >> 24) & 0xff;
} while (0); if (srcA != 0xff) { do { srcR = mul8table[srcA]
[srcR]; srcG = mul8table[srcA][srcG]; srcB = mul8table[srcA][
srcB]; } while (0); } do { SrcOpAnd = (AlphaRules[pCompInfo->
rule].srcOps).andval; SrcOpXor = (AlphaRules[pCompInfo->rule
].srcOps).xorval; SrcOpAdd = (jint) (AlphaRules[pCompInfo->
rule].srcOps).addval - SrcOpXor; } while (0); do { DstOpAnd =
(AlphaRules[pCompInfo->rule].dstOps).andval; DstOpXor = (
AlphaRules[pCompInfo->rule].dstOps).xorval; DstOpAdd = (jint
) (AlphaRules[pCompInfo->rule].dstOps).addval - DstOpXor; }
while (0); loaddst = pMask || !((DstOpAnd | DstOpAdd) == 0) ||
(SrcOpAnd != 0); dstFbase = dstF = ((((srcA) & DstOpAnd)
^ DstOpXor) + DstOpAdd); do { DstPixLut = (pRasInfo)->lutBase
; DstPixrgb = 0; } while (0); rasScan -= width * 1; maskScan -=
width; if (pMask) { pMask += maskOff; } do { do { DstWriteYDither
= (((pRasInfo)->bounds.y1 & 7) << 3); } while (
0); DstWriteInvLut = (pRasInfo)->invColorTable; DstWriteRepPrims
= (pRasInfo)->representsPrimaries; } while (0); do { jint
w = width; do { DstWritererr = (pRasInfo)->redErrTable + DstWriteYDither
; DstWritegerr = (pRasInfo)->grnErrTable + DstWriteYDither
; DstWriteberr = (pRasInfo)->bluErrTable + DstWriteYDither
; DstWriteXDither = ((pRasInfo)->bounds.x1 & 7); } while
(0);; do { jint resA; jint resR, resG, resB; jint srcF; if (
pMask) { pathA = *pMask++; if (!pathA) { pRas = ((void *) (((
intptr_t) (pRas)) + (1))); DstWriteXDither = (DstWriteXDither
+ 1) & 7; continue; } ; dstF = dstFbase; } if (loaddst) {
do { DstPixrgb = DstPixLut[(pRas)[0]]; dstA = ((juint) DstPixrgb
) >> 24; } while (0); } srcF = ((((dstA) & SrcOpAnd
) ^ SrcOpXor) + SrcOpAdd); if (pathA != 0xff) { srcF = mul8table
[pathA][srcF]; dstF = 0xff - pathA + mul8table[pathA][dstF]; }
if (srcF) { if (srcF == 0xff) { resA = srcA; do { resR = srcR
; resG = srcG; resB = srcB; } while (0); } else { resA = mul8table
[srcF][srcA]; do { resR = mul8table[srcF][srcR]; resG = mul8table
[srcF][srcG]; resB = mul8table[srcF][srcB]; } while (0); } } else
{ if (dstF == 0xff) { pRas = ((void *) (((intptr_t) (pRas)) +
(1))); DstWriteXDither = (DstWriteXDither + 1) & 7; continue
; } resA = 0; resR = resG = resB = 0; } if (dstF) { dstA = mul8table
[dstF][dstA]; resA += dstA; if (0) { dstA = dstF; } if (dstA)
{ jint tmpR, tmpG, tmpB; do { tmpR = (DstPixrgb >> 16)
& 0xff; tmpG = (DstPixrgb >> 8) & 0xff; tmpB =
(DstPixrgb >> 0) & 0xff; } while (0); if (dstA != 0xff
) { do { tmpR = mul8table[dstA][tmpR]; tmpG = mul8table[dstA]
[tmpG]; tmpB = mul8table[dstA][tmpB]; } while (0); } do { resR
+= tmpR; resG += tmpG; resB += tmpB; } while (0); } } if (!(
0) && resA && resA < 0xff) { do { resR = div8table
[resA][resR]; resG = div8table[resA][resG]; resB = div8table[
resA][resB]; } while (0); } do { if (!(((resR == 0) || (resR ==
255)) && ((resG == 0) || (resG == 255)) && (
(resB == 0) || (resB == 255)) && DstWriteRepPrims)) {
resR += DstWritererr[DstWriteXDither]; resG += DstWritegerr[
DstWriteXDither]; resB += DstWriteberr[DstWriteXDither]; } do
{ if (((resR|resG|resB) >> 8) != 0) { do { if (((resR)
>> 8) != 0) {resR = (~(resR >> 31)) & 255; }
} while (0); do { if (((resG) >> 8) != 0) {resG = (~(resG
>> 31)) & 255; } } while (0); do { if (((resB) >>
8) != 0) {resB = (~(resB >> 31)) & 255; } } while (
0); } } while (0); (pRas)[0] = (DstWriteInvLut)[((((unsigned char
) resR) >> 3)<<10) + ((((unsigned char) resG) >>
3)<<5) + (((unsigned char) resB) >> 3)]; } while
(0); pRas = ((void *) (((intptr_t) (pRas)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; } while (--w > 0); pRas =
((void *) (((intptr_t) (pRas)) + (rasScan))); DstWriteYDither
= (DstWriteYDither + (1 << 3)) & (7 << 3); if
(pMask) { pMask = ((void *) (((intptr_t) (pMask)) + (maskScan
))); } } while (--height > 0); }
247
248DEFINE_ALPHA_MASKBLIT(IntArgb, ByteIndexed, 4ByteArgb)void IntArgbToByteIndexedAlphaMaskBlit (void *dstBase, void *
srcBase, jubyte *pMask, jint maskOff, jint maskScan, jint width
, jint height, SurfaceDataRasInfo *pDstInfo, SurfaceDataRasInfo
*pSrcInfo, NativePrimitive *pPrim, CompositeInfo *pCompInfo)
{ jint pathA = 0xff; jint srcA = 0; jint dstA = 0; jint extraA
= (jint)(pCompInfo->details.extraAlpha * 255.0 + 0.5); jint
srcScan = pSrcInfo->scanStride; jint dstScan = pDstInfo->
scanStride; jboolean loadsrc, loaddst; IntArgbDataType *pSrc =
(IntArgbDataType *) (srcBase); ByteIndexedDataType *pDst = (
ByteIndexedDataType *) (dstBase); jint SrcPix; jint *DstPixLut
; jint DstPixrgb; int DstWriteXDither, DstWriteYDither, DstWriteRepPrims
; char *DstWritererr, *DstWritegerr, *DstWriteberr; unsigned char
*DstWriteInvLut; jint SrcOpAnd, SrcOpXor, SrcOpAdd; jint DstOpAnd
, DstOpXor, DstOpAdd; do { SrcOpAnd = (AlphaRules[pCompInfo->
rule].srcOps).andval; SrcOpXor = (AlphaRules[pCompInfo->rule
].srcOps).xorval; SrcOpAdd = (jint) (AlphaRules[pCompInfo->
rule].srcOps).addval - SrcOpXor; } while (0); do { DstOpAnd =
(AlphaRules[pCompInfo->rule].dstOps).andval; DstOpXor = (
AlphaRules[pCompInfo->rule].dstOps).xorval; DstOpAdd = (jint
) (AlphaRules[pCompInfo->rule].dstOps).addval - DstOpXor; }
while (0); loadsrc = !((SrcOpAnd | SrcOpAdd) == 0) || (DstOpAnd
!= 0); loaddst = pMask || !((DstOpAnd | DstOpAdd) == 0) || (
SrcOpAnd != 0); SrcPix = 0; do { DstPixLut = (pDstInfo)->lutBase
; DstPixrgb = 0; } while (0); srcScan -= width * 4; dstScan -=
width * 1; maskScan -= width; if (pMask) { pMask += maskOff;
} do { do { DstWriteYDither = (((pDstInfo)->bounds.y1 &
7) << 3); } while (0); DstWriteInvLut = (pDstInfo)->
invColorTable; DstWriteRepPrims = (pDstInfo)->representsPrimaries
; } while (0); do { jint w = width; do { DstWritererr = (pDstInfo
)->redErrTable + DstWriteYDither; DstWritegerr = (pDstInfo
)->grnErrTable + DstWriteYDither; DstWriteberr = (pDstInfo
)->bluErrTable + DstWriteYDither; DstWriteXDither = ((pDstInfo
)->bounds.x1 & 7); } while (0);; do { jint resA; jint resR
, resG, resB; jint srcF; jint dstF; if (pMask) { pathA = *pMask
++; if (!pathA) { pSrc = ((void *) (((intptr_t) (pSrc)) + (4)
)); pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; continue; } ; } if (loadsrc
) { do { SrcPix = (pSrc)[0]; srcA = ((juint) SrcPix) >>
24; } while (0); srcA = mul8table[extraA][srcA]; } if (loaddst
) { do { DstPixrgb = DstPixLut[(pDst)[0]]; dstA = ((juint) DstPixrgb
) >> 24; } while (0); } srcF = ((((dstA) & SrcOpAnd
) ^ SrcOpXor) + SrcOpAdd); dstF = ((((srcA) & DstOpAnd) ^
DstOpXor) + DstOpAdd); if (pathA != 0xff) { srcF = mul8table
[pathA][srcF]; dstF = 0xff - pathA + mul8table[pathA][dstF]; }
if (srcF) { resA = mul8table[srcF][srcA]; if (!(0)) { srcF =
resA; } else { srcF = mul8table[srcF][extraA]; } if (srcF) {
do { resR = (SrcPix >> 16) & 0xff; resG = (SrcPix >>
8) & 0xff; resB = (SrcPix >> 0) & 0xff; } while
(0); if (srcF != 0xff) { do { resR = mul8table[srcF][resR]; resG
= mul8table[srcF][resG]; resB = mul8table[srcF][resB]; } while
(0); } } else { if (dstF == 0xff) { pSrc = ((void *) (((intptr_t
) (pSrc)) + (4))); pDst = ((void *) (((intptr_t) (pDst)) + (1
))); DstWriteXDither = (DstWriteXDither + 1) & 7; continue
; } resR = resG = resB = 0; } } else { if (dstF == 0xff) { pSrc
= ((void *) (((intptr_t) (pSrc)) + (4))); pDst = ((void *) (
((intptr_t) (pDst)) + (1))); DstWriteXDither = (DstWriteXDither
+ 1) & 7; continue; } resA = 0; resR = resG = resB = 0; }
if (dstF) { dstA = mul8table[dstF][dstA]; if (!(0)) { dstF =
dstA; } resA += dstA; if (dstF) { jint tmpR, tmpG, tmpB; do {
tmpR = (DstPixrgb >> 16) & 0xff; tmpG = (DstPixrgb
>> 8) & 0xff; tmpB = (DstPixrgb >> 0) & 0xff
; } while (0); if (dstF != 0xff) { do { tmpR = mul8table[dstF
][tmpR]; tmpG = mul8table[dstF][tmpG]; tmpB = mul8table[dstF]
[tmpB]; } while (0); } do { resR += tmpR; resG += tmpG; resB +=
tmpB; } while (0); } } if (!(0) && resA && resA
< 0xff) { do { resR = div8table[resA][resR]; resG = div8table
[resA][resG]; resB = div8table[resA][resB]; } while (0); } do
{ if (!(((resR == 0) || (resR == 255)) && ((resG == 0
) || (resG == 255)) && ((resB == 0) || (resB == 255))
&& DstWriteRepPrims)) { resR += DstWritererr[DstWriteXDither
]; resG += DstWritegerr[DstWriteXDither]; resB += DstWriteberr
[DstWriteXDither]; } do { if (((resR|resG|resB) >> 8) !=
0) { do { if (((resR) >> 8) != 0) {resR = (~(resR >>
31)) & 255; } } while (0); do { if (((resG) >> 8) !=
0) {resG = (~(resG >> 31)) & 255; } } while (0); do
{ if (((resB) >> 8) != 0) {resB = (~(resB >> 31)
) & 255; } } while (0); } } while (0); (pDst)[0] = (DstWriteInvLut
)[((((unsigned char) resR) >> 3)<<10) + ((((unsigned
char) resG) >> 3)<<5) + (((unsigned char) resB) >>
3)]; } while (0); pSrc = ((void *) (((intptr_t) (pSrc)) + (4
))); pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; } while (--w > 0); pSrc =
((void *) (((intptr_t) (pSrc)) + (srcScan))); pDst = ((void *
) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither
+ (1 << 3)) & (7 << 3); if (pMask) { pMask =
((void *) (((intptr_t) (pMask)) + (maskScan))); } } while (--
height > 0); }
249
250DEFINE_ALPHA_MASKBLIT(IntArgbPre, ByteIndexed, 4ByteArgb)void IntArgbPreToByteIndexedAlphaMaskBlit (void *dstBase, void
*srcBase, jubyte *pMask, jint maskOff, jint maskScan, jint width
, jint height, SurfaceDataRasInfo *pDstInfo, SurfaceDataRasInfo
*pSrcInfo, NativePrimitive *pPrim, CompositeInfo *pCompInfo)
{ jint pathA = 0xff; jint srcA = 0; jint dstA = 0; jint extraA
= (jint)(pCompInfo->details.extraAlpha * 255.0 + 0.5); jint
srcScan = pSrcInfo->scanStride; jint dstScan = pDstInfo->
scanStride; jboolean loadsrc, loaddst; IntArgbPreDataType *pSrc
= (IntArgbPreDataType *) (srcBase); ByteIndexedDataType *pDst
= (ByteIndexedDataType *) (dstBase); jint SrcPix; jint *DstPixLut
; jint DstPixrgb; int DstWriteXDither, DstWriteYDither, DstWriteRepPrims
; char *DstWritererr, *DstWritegerr, *DstWriteberr; unsigned char
*DstWriteInvLut; jint SrcOpAnd, SrcOpXor, SrcOpAdd; jint DstOpAnd
, DstOpXor, DstOpAdd; do { SrcOpAnd = (AlphaRules[pCompInfo->
rule].srcOps).andval; SrcOpXor = (AlphaRules[pCompInfo->rule
].srcOps).xorval; SrcOpAdd = (jint) (AlphaRules[pCompInfo->
rule].srcOps).addval - SrcOpXor; } while (0); do { DstOpAnd =
(AlphaRules[pCompInfo->rule].dstOps).andval; DstOpXor = (
AlphaRules[pCompInfo->rule].dstOps).xorval; DstOpAdd = (jint
) (AlphaRules[pCompInfo->rule].dstOps).addval - DstOpXor; }
while (0); loadsrc = !((SrcOpAnd | SrcOpAdd) == 0) || (DstOpAnd
!= 0); loaddst = pMask || !((DstOpAnd | DstOpAdd) == 0) || (
SrcOpAnd != 0); SrcPix = 0; do { DstPixLut = (pDstInfo)->lutBase
; DstPixrgb = 0; } while (0); srcScan -= width * 4; dstScan -=
width * 1; maskScan -= width; if (pMask) { pMask += maskOff;
} do { do { DstWriteYDither = (((pDstInfo)->bounds.y1 &
7) << 3); } while (0); DstWriteInvLut = (pDstInfo)->
invColorTable; DstWriteRepPrims = (pDstInfo)->representsPrimaries
; } while (0); do { jint w = width; do { DstWritererr = (pDstInfo
)->redErrTable + DstWriteYDither; DstWritegerr = (pDstInfo
)->grnErrTable + DstWriteYDither; DstWriteberr = (pDstInfo
)->bluErrTable + DstWriteYDither; DstWriteXDither = ((pDstInfo
)->bounds.x1 & 7); } while (0);; do { jint resA; jint resR
, resG, resB; jint srcF; jint dstF; if (pMask) { pathA = *pMask
++; if (!pathA) { pSrc = ((void *) (((intptr_t) (pSrc)) + (4)
)); pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; continue; } ; } if (loadsrc
) { do { SrcPix = (pSrc)[0]; srcA = ((juint) SrcPix) >>
24; } while (0); srcA = mul8table[extraA][srcA]; } if (loaddst
) { do { DstPixrgb = DstPixLut[(pDst)[0]]; dstA = ((juint) DstPixrgb
) >> 24; } while (0); } srcF = ((((dstA) & SrcOpAnd
) ^ SrcOpXor) + SrcOpAdd); dstF = ((((srcA) & DstOpAnd) ^
DstOpXor) + DstOpAdd); if (pathA != 0xff) { srcF = mul8table
[pathA][srcF]; dstF = 0xff - pathA + mul8table[pathA][dstF]; }
if (srcF) { resA = mul8table[srcF][srcA]; if (!(1)) { srcF =
resA; } else { srcF = mul8table[srcF][extraA]; } if (srcF) {
do { do { (resB) = (SrcPix) & 0xff; (resG) = ((SrcPix) >>
8) & 0xff; (resR) = ((SrcPix) >> 16) & 0xff; }
while (0); } while (0); if (srcF != 0xff) { do { resR = mul8table
[srcF][resR]; resG = mul8table[srcF][resG]; resB = mul8table[
srcF][resB]; } while (0); } } else { if (dstF == 0xff) { pSrc
= ((void *) (((intptr_t) (pSrc)) + (4))); pDst = ((void *) (
((intptr_t) (pDst)) + (1))); DstWriteXDither = (DstWriteXDither
+ 1) & 7; continue; } resR = resG = resB = 0; } } else {
if (dstF == 0xff) { pSrc = ((void *) (((intptr_t) (pSrc)) + (
4))); pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; continue; } resA = 0; resR =
resG = resB = 0; } if (dstF) { dstA = mul8table[dstF][dstA];
if (!(0)) { dstF = dstA; } resA += dstA; if (dstF) { jint tmpR
, tmpG, tmpB; do { tmpR = (DstPixrgb >> 16) & 0xff;
tmpG = (DstPixrgb >> 8) & 0xff; tmpB = (DstPixrgb >>
0) & 0xff; } while (0); if (dstF != 0xff) { do { tmpR = mul8table
[dstF][tmpR]; tmpG = mul8table[dstF][tmpG]; tmpB = mul8table[
dstF][tmpB]; } while (0); } do { resR += tmpR; resG += tmpG; resB
+= tmpB; } while (0); } } if (!(0) && resA &&
resA < 0xff) { do { resR = div8table[resA][resR]; resG = div8table
[resA][resG]; resB = div8table[resA][resB]; } while (0); } do
{ if (!(((resR == 0) || (resR == 255)) && ((resG == 0
) || (resG == 255)) && ((resB == 0) || (resB == 255))
&& DstWriteRepPrims)) { resR += DstWritererr[DstWriteXDither
]; resG += DstWritegerr[DstWriteXDither]; resB += DstWriteberr
[DstWriteXDither]; } do { if (((resR|resG|resB) >> 8) !=
0) { do { if (((resR) >> 8) != 0) {resR = (~(resR >>
31)) & 255; } } while (0); do { if (((resG) >> 8) !=
0) {resG = (~(resG >> 31)) & 255; } } while (0); do
{ if (((resB) >> 8) != 0) {resB = (~(resB >> 31)
) & 255; } } while (0); } } while (0); (pDst)[0] = (DstWriteInvLut
)[((((unsigned char) resR) >> 3)<<10) + ((((unsigned
char) resG) >> 3)<<5) + (((unsigned char) resB) >>
3)]; } while (0); pSrc = ((void *) (((intptr_t) (pSrc)) + (4
))); pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; } while (--w > 0); pSrc =
((void *) (((intptr_t) (pSrc)) + (srcScan))); pDst = ((void *
) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither
+ (1 << 3)) & (7 << 3); if (pMask) { pMask =
((void *) (((intptr_t) (pMask)) + (maskScan))); } } while (--
height > 0); }
251
252DEFINE_ALPHA_MASKBLIT(IntRgb, ByteIndexed, 4ByteArgb)void IntRgbToByteIndexedAlphaMaskBlit (void *dstBase, void *srcBase
, jubyte *pMask, jint maskOff, jint maskScan, jint width, jint
height, SurfaceDataRasInfo *pDstInfo, SurfaceDataRasInfo *pSrcInfo
, NativePrimitive *pPrim, CompositeInfo *pCompInfo) { jint pathA
= 0xff; jint srcA = 0; jint dstA = 0; jint extraA = (jint)(pCompInfo
->details.extraAlpha * 255.0 + 0.5); jint srcScan = pSrcInfo
->scanStride; jint dstScan = pDstInfo->scanStride; jboolean
loadsrc, loaddst; IntRgbDataType *pSrc = (IntRgbDataType *) (
srcBase); ByteIndexedDataType *pDst = (ByteIndexedDataType *)
(dstBase); jint *DstPixLut; jint DstPixrgb; int DstWriteXDither
, DstWriteYDither, DstWriteRepPrims; char *DstWritererr, *DstWritegerr
, *DstWriteberr; unsigned char *DstWriteInvLut; jint SrcOpAnd
, SrcOpXor, SrcOpAdd; jint DstOpAnd, DstOpXor, DstOpAdd; do {
SrcOpAnd = (AlphaRules[pCompInfo->rule].srcOps).andval; SrcOpXor
= (AlphaRules[pCompInfo->rule].srcOps).xorval; SrcOpAdd =
(jint) (AlphaRules[pCompInfo->rule].srcOps).addval - SrcOpXor
; } while (0); do { DstOpAnd = (AlphaRules[pCompInfo->rule
].dstOps).andval; DstOpXor = (AlphaRules[pCompInfo->rule].
dstOps).xorval; DstOpAdd = (jint) (AlphaRules[pCompInfo->rule
].dstOps).addval - DstOpXor; } while (0); loadsrc = !((SrcOpAnd
| SrcOpAdd) == 0) || (DstOpAnd != 0); loaddst = pMask || !((
DstOpAnd | DstOpAdd) == 0) || (SrcOpAnd != 0); ; do { DstPixLut
= (pDstInfo)->lutBase; DstPixrgb = 0; } while (0); srcScan
-= width * 4; dstScan -= width * 1; maskScan -= width; if (pMask
) { pMask += maskOff; } do { do { DstWriteYDither = (((pDstInfo
)->bounds.y1 & 7) << 3); } while (0); DstWriteInvLut
= (pDstInfo)->invColorTable; DstWriteRepPrims = (pDstInfo
)->representsPrimaries; } while (0); do { jint w = width; do
{ DstWritererr = (pDstInfo)->redErrTable + DstWriteYDither
; DstWritegerr = (pDstInfo)->grnErrTable + DstWriteYDither
; DstWriteberr = (pDstInfo)->bluErrTable + DstWriteYDither
; DstWriteXDither = ((pDstInfo)->bounds.x1 & 7); } while
(0);; do { jint resA; jint resR, resG, resB; jint srcF; jint
dstF; if (pMask) { pathA = *pMask++; if (!pathA) { pSrc = ((
void *) (((intptr_t) (pSrc)) + (4))); pDst = ((void *) (((intptr_t
) (pDst)) + (1))); DstWriteXDither = (DstWriteXDither + 1) &
7; continue; } ; } if (loadsrc) { srcA = 0xff; srcA = mul8table
[extraA][srcA]; } if (loaddst) { do { DstPixrgb = DstPixLut[(
pDst)[0]]; dstA = ((juint) DstPixrgb) >> 24; } while (0
); } srcF = ((((dstA) & SrcOpAnd) ^ SrcOpXor) + SrcOpAdd)
; dstF = ((((srcA) & DstOpAnd) ^ DstOpXor) + DstOpAdd); if
(pathA != 0xff) { srcF = mul8table[pathA][srcF]; dstF = 0xff
- pathA + mul8table[pathA][dstF]; } if (srcF) { resA = mul8table
[srcF][srcA]; if (!(0)) { srcF = resA; } else { srcF = mul8table
[srcF][extraA]; } if (srcF) { do { jint pixel = (pSrc)[0]; do
{ (resB) = (pixel) & 0xff; (resG) = ((pixel) >> 8)
& 0xff; (resR) = ((pixel) >> 16) & 0xff; } while
(0); } while (0); if (srcF != 0xff) { do { resR = mul8table[
srcF][resR]; resG = mul8table[srcF][resG]; resB = mul8table[srcF
][resB]; } while (0); } } else { if (dstF == 0xff) { pSrc = (
(void *) (((intptr_t) (pSrc)) + (4))); pDst = ((void *) (((intptr_t
) (pDst)) + (1))); DstWriteXDither = (DstWriteXDither + 1) &
7; continue; } resR = resG = resB = 0; } } else { if (dstF ==
0xff) { pSrc = ((void *) (((intptr_t) (pSrc)) + (4))); pDst =
((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither = (DstWriteXDither
+ 1) & 7; continue; } resA = 0; resR = resG = resB = 0; }
if (dstF) { dstA = mul8table[dstF][dstA]; if (!(0)) { dstF =
dstA; } resA += dstA; if (dstF) { jint tmpR, tmpG, tmpB; do {
tmpR = (DstPixrgb >> 16) & 0xff; tmpG = (DstPixrgb
>> 8) & 0xff; tmpB = (DstPixrgb >> 0) & 0xff
; } while (0); if (dstF != 0xff) { do { tmpR = mul8table[dstF
][tmpR]; tmpG = mul8table[dstF][tmpG]; tmpB = mul8table[dstF]
[tmpB]; } while (0); } do { resR += tmpR; resG += tmpG; resB +=
tmpB; } while (0); } } if (!(0) && resA && resA
< 0xff) { do { resR = div8table[resA][resR]; resG = div8table
[resA][resG]; resB = div8table[resA][resB]; } while (0); } do
{ if (!(((resR == 0) || (resR == 255)) && ((resG == 0
) || (resG == 255)) && ((resB == 0) || (resB == 255))
&& DstWriteRepPrims)) { resR += DstWritererr[DstWriteXDither
]; resG += DstWritegerr[DstWriteXDither]; resB += DstWriteberr
[DstWriteXDither]; } do { if (((resR|resG|resB) >> 8) !=
0) { do { if (((resR) >> 8) != 0) {resR = (~(resR >>
31)) & 255; } } while (0); do { if (((resG) >> 8) !=
0) {resG = (~(resG >> 31)) & 255; } } while (0); do
{ if (((resB) >> 8) != 0) {resB = (~(resB >> 31)
) & 255; } } while (0); } } while (0); (pDst)[0] = (DstWriteInvLut
)[((((unsigned char) resR) >> 3)<<10) + ((((unsigned
char) resG) >> 3)<<5) + (((unsigned char) resB) >>
3)]; } while (0); pSrc = ((void *) (((intptr_t) (pSrc)) + (4
))); pDst = ((void *) (((intptr_t) (pDst)) + (1))); DstWriteXDither
= (DstWriteXDither + 1) & 7; } while (--w > 0); pSrc =
((void *) (((intptr_t) (pSrc)) + (srcScan))); pDst = ((void *
) (((intptr_t) (pDst)) + (dstScan))); DstWriteYDither = (DstWriteYDither
+ (1 << 3)) & (7 << 3); if (pMask) { pMask =
((void *) (((intptr_t) (pMask)) + (maskScan))); } } while (--
height > 0); }
253
254DEFINE_SOLID_DRAWGLYPHLISTAA(ByteIndexed, 3ByteRgb)void ByteIndexedDrawGlyphListAA(SurfaceDataRasInfo *pRasInfo,
ImageRef *glyphs, jint totalGlyphs, jint fgpixel, jint argbcolor
, jint clipLeft, jint clipTop, jint clipRight, jint clipBottom
, NativePrimitive *pPrim, CompositeInfo *pCompInfo) { jint glyphCounter
; jint scan = pRasInfo->scanStride; ByteIndexedDataType *pPix
; jint srcA; jint srcR, srcG, srcB; jint *pixLut; int pixXDither
, pixYDither, pixRepPrims; char *pixrerr, *pixgerr, *pixberr;
unsigned char *pixInvLut; pixLut = (pRasInfo)->lutBase; do
{ do { pixYDither = (((pRasInfo)->bounds.y1 & 7) <<
3); } while (0); pixInvLut = (pRasInfo)->invColorTable; pixRepPrims
= (pRasInfo)->representsPrimaries; } while (0); do { pixrerr
= (pRasInfo)->redErrTable + pixYDither; pixgerr = (pRasInfo
)->grnErrTable + pixYDither; pixberr = (pRasInfo)->bluErrTable
+ pixYDither; pixXDither = ((pRasInfo)->bounds.x1 & 7
); } while (0);; do { (srcB) = (argbcolor) & 0xff; (srcG)
= ((argbcolor) >> 8) & 0xff; (srcR) = ((argbcolor)
>> 16) & 0xff; (srcA) = ((argbcolor) >> 24) &
0xff; } while (0); ; for (glyphCounter = 0; glyphCounter <
totalGlyphs; glyphCounter++) { const jubyte * pixels; int rowBytes
; int left, top; int width, height; int right, bottom; pixels
= (const jubyte *)glyphs[glyphCounter].pixels; if (!pixels) {
continue; } rowBytes = glyphs[glyphCounter].rowBytes; left =
glyphs[glyphCounter].x; top = glyphs[glyphCounter].y; width =
glyphs[glyphCounter].width; height = glyphs[glyphCounter].height
; right = left + width; bottom = top + height; if (left < clipLeft
) { pixels += (clipLeft - left) * 1 ; left = clipLeft; } if (
top < clipTop) { pixels += (clipTop - top) * rowBytes; top
= clipTop; } if (right > clipRight) { right = clipRight; }
if (bottom > clipBottom) { bottom = clipBottom; } if (right
<= left || bottom <= top) { continue; } width = right -
left; height = bottom - top; pPix = ((void *) (((intptr_t) (
pRasInfo->rasBase)) + (((ptrdiff_t)(top))*(scan) + ((ptrdiff_t
)(left))*(1)))); do { pixYDither = ((top & 7) << 3)
; } while (0); do { int x = 0; do { pixrerr = (pRasInfo)->
redErrTable + pixYDither; pixgerr = (pRasInfo)->grnErrTable
+ pixYDither; pixberr = (pRasInfo)->bluErrTable + pixYDither
; pixXDither = (left & 7); } while (0); do { do { jint dstR
, dstG, dstB; jint mixValSrc = pixels[x]; if (mixValSrc) { if
(mixValSrc < 255) { jint mixValDst = 255 - mixValSrc; do {
jint rgb = pixLut[pPix[x]]; do { (dstB) = (rgb) & 0xff; (
dstG) = ((rgb) >> 8) & 0xff; (dstR) = ((rgb) >>
16) & 0xff; } while (0); } while (0); do { dstR = mul8table
[mixValDst][dstR] + mul8table[mixValSrc][srcR]; dstG = mul8table
[mixValDst][dstG] + mul8table[mixValSrc][srcG]; dstB = mul8table
[mixValDst][dstB] + mul8table[mixValSrc][srcB]; } while (0); do
{ if (!(((dstR == 0) || (dstR == 255)) && ((dstG == 0
) || (dstG == 255)) && ((dstB == 0) || (dstB == 255))
&& pixRepPrims)) { dstR += pixrerr[pixXDither]; dstG
+= pixgerr[pixXDither]; dstB += pixberr[pixXDither]; } do { if
(((dstR|dstG|dstB) >> 8) != 0) { do { if (((dstR) >>
8) != 0) {dstR = (~(dstR >> 31)) & 255; } } while (
0); do { if (((dstG) >> 8) != 0) {dstG = (~(dstG >>
31)) & 255; } } while (0); do { if (((dstB) >> 8) !=
0) {dstB = (~(dstB >> 31)) & 255; } } while (0); }
} while (0); (pPix)[x] = (pixInvLut)[((((unsigned char) dstR
) >> 3)<<10) + ((((unsigned char) dstG) >> 3
)<<5) + (((unsigned char) dstB) >> 3)]; } while (
0); } else { (pPix)[x] = (jubyte) (fgpixel); } } } while (0);
; pixXDither = (pixXDither + 1) & 7; } while (++x < width
); pPix = ((void *) (((intptr_t) (pPix)) + (scan))); pixels +=
rowBytes; pixYDither = (pixYDither + (1 << 3)) & (
7 << 3); } while (--height > 0); } }
255
256DEFINE_TRANSFORMHELPERS(ByteIndexed)void ByteIndexedNrstNbrTransformHelper(SurfaceDataRasInfo *pSrcInfo
, jint *pRGB, jint numpix, jlong xlong, jlong dxlong, jlong ylong
, jlong dylong) { jint *SrcReadLut; ByteIndexedDataType *pBase
= pSrcInfo->rasBase; jint scan = pSrcInfo->scanStride;
jint *pEnd = pRGB + numpix; xlong += (((jlong) (pSrcInfo->
bounds.x1)) << 32); ylong += (((jlong) (pSrcInfo->bounds
.y1)) << 32); SrcReadLut = (pSrcInfo)->lutBase; while
(pRGB < pEnd) { ByteIndexedDataType *pRow = ((void *) (((
intptr_t) (pBase)) + (((intptr_t) (((jint) ((ylong) >> 32
)))) * (scan)))); do { jint argb = SrcReadLut[pRow[((jint) ((
xlong) >> 32))]]; jint a = (((juint) (argb)) >> (
24)); if (a == 0) { argb = 0; } else if (a < 0xff) { jint r
= (argb >> 16) & 0xff; jint g = (argb >> 8) &
0xff; jint b = (argb ) & 0xff; r = mul8table[a][r]; g = mul8table
[a][g]; b = mul8table[a][b]; argb = (((((((a) << 8) | (
r)) << 8) | (g)) << 8) | (b)); } (pRGB)[0] = argb
; } while (0); pRGB++; xlong += dxlong; ylong += dylong; } } void
ByteIndexedBilinearTransformHelper(SurfaceDataRasInfo *pSrcInfo
, jint *pRGB, jint numpix, jlong xlong, jlong dxlong, jlong ylong
, jlong dylong) { jint *SrcReadLut; jint scan = pSrcInfo->
scanStride; jint cx, cy, cw, ch; jint *pEnd = pRGB + numpix*4
; cx = pSrcInfo->bounds.x1; cw = pSrcInfo->bounds.x2-cx
; cy = pSrcInfo->bounds.y1; ch = pSrcInfo->bounds.y2-cy
; xlong -= (((jlong) 1) << 31); ylong -= (((jlong) 1) <<
31); SrcReadLut = (pSrcInfo)->lutBase; while (pRGB < pEnd
) { jint xwhole = ((jint) ((xlong) >> 32)); jint ywhole
= ((jint) ((ylong) >> 32)); jint xdelta, ydelta, isneg
; ByteIndexedDataType *pRow; xdelta = ((juint) (xwhole + 1 - cw
)) >> 31; isneg = xwhole >> 31; xwhole -= isneg; xdelta
+= isneg; ydelta = ((ywhole + 1 - ch) >> 31); isneg = ywhole
>> 31; ywhole -= isneg; ydelta -= isneg; ydelta &=
scan; xwhole += cx; pRow = ((void *) (((intptr_t) (pSrcInfo->
rasBase)) + (((intptr_t) (ywhole + cy)) * (scan)))); do { jint
argb = SrcReadLut[pRow[xwhole]]; jint a = (((juint) (argb)) >>
(24)); if (a == 0) { argb = 0; } else if (a < 0xff) { jint
r = (argb >> 16) & 0xff; jint g = (argb >> 8
) & 0xff; jint b = (argb ) & 0xff; r = mul8table[a][r
]; g = mul8table[a][g]; b = mul8table[a][b]; argb = (((((((a)
<< 8) | (r)) << 8) | (g)) << 8) | (b)); } (
pRGB)[0] = argb; } while (0); do { jint argb = SrcReadLut[pRow
[xwhole+xdelta]]; jint a = (((juint) (argb)) >> (24)); if
(a == 0) { argb = 0; } else if (a < 0xff) { jint r = (argb
>> 16) & 0xff; jint g = (argb >> 8) & 0xff
; jint b = (argb ) & 0xff; r = mul8table[a][r]; g = mul8table
[a][g]; b = mul8table[a][b]; argb = (((((((a) << 8) | (
r)) << 8) | (g)) << 8) | (b)); } (pRGB)[1] = argb
; } while (0); pRow = ((void *) (((intptr_t) (pRow)) + (ydelta
))); do { jint argb = SrcReadLut[pRow[xwhole]]; jint a = (((juint
) (argb)) >> (24)); if (a == 0) { argb = 0; } else if (
a < 0xff) { jint r = (argb >> 16) & 0xff; jint g
= (argb >> 8) & 0xff; jint b = (argb ) & 0xff;
r = mul8table[a][r]; g = mul8table[a][g]; b = mul8table[a][b
]; argb = (((((((a) << 8) | (r)) << 8) | (g)) <<
8) | (b)); } (pRGB)[2] = argb; } while (0); do { jint argb =
SrcReadLut[pRow[xwhole+xdelta]]; jint a = (((juint) (argb)) >>
(24)); if (a == 0) { argb = 0; } else if (a < 0xff) { jint
r = (argb >> 16) & 0xff; jint g = (argb >> 8
) & 0xff; jint b = (argb ) & 0xff; r = mul8table[a][r
]; g = mul8table[a][g]; b = mul8table[a][b]; argb = (((((((a)
<< 8) | (r)) << 8) | (g)) << 8) | (b)); } (
pRGB)[3] = argb; } while (0); pRGB += 4; xlong += dxlong; ylong
+= dylong; } } void ByteIndexedBicubicTransformHelper(SurfaceDataRasInfo
*pSrcInfo, jint *pRGB, jint numpix, jlong xlong, jlong dxlong
, jlong ylong, jlong dylong) { jint *SrcReadLut; jint scan = pSrcInfo
->scanStride; jint cx, cy, cw, ch; jint *pEnd = pRGB + numpix
*16; cx = pSrcInfo->bounds.x1; cw = pSrcInfo->bounds.x2
-cx; cy = pSrcInfo->bounds.y1; ch = pSrcInfo->bounds.y2
-cy; xlong -= (((jlong) 1) << 31); ylong -= (((jlong) 1
) << 31); SrcReadLut = (pSrcInfo)->lutBase; while (pRGB
< pEnd) { jint xwhole = ((jint) ((xlong) >> 32)); jint
ywhole = ((jint) ((ylong) >> 32)); jint xdelta0, xdelta1
, xdelta2; jint ydelta0, ydelta1, ydelta2; jint isneg; ByteIndexedDataType
*pRow; xdelta0 = (-xwhole) >> 31; xdelta1 = ((juint) (
xwhole + 1 - cw)) >> 31; xdelta2 = ((juint) (xwhole + 2
- cw)) >> 31; isneg = xwhole >> 31; xwhole -= isneg
; xdelta1 += isneg; xdelta2 += xdelta1; ydelta0 = ((-ywhole) >>
31) & (-scan); ydelta1 = ((ywhole + 1 - ch) >> 31)
& scan; ydelta2 = ((ywhole + 2 - ch) >> 31) & scan
; isneg = ywhole >> 31; ywhole -= isneg; ydelta1 += (isneg
& -scan); xwhole += cx; pRow = ((void *) (((intptr_t) (pSrcInfo
->rasBase)) + (((intptr_t) (ywhole + cy)) * (scan)))); pRow
= ((void *) (((intptr_t) (pRow)) + (ydelta0))); do { jint argb
= SrcReadLut[pRow[xwhole+xdelta0]]; jint a = (((juint) (argb
)) >> (24)); if (a == 0) { argb = 0; } else if (a < 0xff
) { jint r = (argb >> 16) & 0xff; jint g = (argb >>
8) & 0xff; jint b = (argb ) & 0xff; r = mul8table[a]
[r]; g = mul8table[a][g]; b = mul8table[a][b]; argb = (((((((
a) << 8) | (r)) << 8) | (g)) << 8) | (b)); }
(pRGB)[0] = argb; } while (0); do { jint argb = SrcReadLut[pRow
[xwhole]]; jint a = (((juint) (argb)) >> (24)); if (a ==
0) { argb = 0; } else if (a < 0xff) { jint r = (argb >>
16) & 0xff; jint g = (argb >> 8) & 0xff; jint b
= (argb ) & 0xff; r = mul8table[a][r]; g = mul8table[a][
g]; b = mul8table[a][b]; argb = (((((((a) << 8) | (r)) <<
8) | (g)) << 8) | (b)); } (pRGB)[1] = argb; } while (0
); do { jint argb = SrcReadLut[pRow[xwhole+xdelta1]]; jint a =
(((juint) (argb)) >> (24)); if (a == 0) { argb = 0; } else
if (a < 0xff) { jint r = (argb >> 16) & 0xff; jint
g = (argb >> 8) & 0xff; jint b = (argb ) & 0xff
; r = mul8table[a][r]; g = mul8table[a][g]; b = mul8table[a][
b]; argb = (((((((a) << 8) | (r)) << 8) | (g)) <<
8) | (b)); } (pRGB)[2] = argb; } while (0); do { jint argb =
SrcReadLut[pRow[xwhole+xdelta2]]; jint a = (((juint) (argb))
>> (24)); if (a == 0) { argb = 0; } else if (a < 0xff
) { jint r = (argb >> 16) & 0xff; jint g = (argb >>
8) & 0xff; jint b = (argb ) & 0xff; r = mul8table[a]
[r]; g = mul8table[a][g]; b = mul8table[a][b]; argb = (((((((
a) << 8) | (r)) << 8) | (g)) << 8) | (b)); }
(pRGB)[3] = argb; } while (0); pRow = ((void *) (((intptr_t)
(pRow)) + (-ydelta0))); do { jint argb = SrcReadLut[pRow[xwhole
+xdelta0]]; jint a = (((juint) (argb)) >> (24)); if (a ==
0) { argb = 0; } else if (a < 0xff) { jint r = (argb >>
16) & 0xff; jint g = (argb >> 8) & 0xff; jint b
= (argb ) & 0xff; r = mul8table[a][r]; g = mul8table[a][
g]; b = mul8table[a][b]; argb = (((((((a) << 8) | (r)) <<
8) | (g)) << 8) | (b)); } (pRGB)[4] = argb; } while (0
); do { jint argb = SrcReadLut[pRow[xwhole]]; jint a = (((juint
) (argb)) >> (24)); if (a == 0) { argb = 0; } else if (
a < 0xff) { jint r = (argb >> 16) & 0xff; jint g
= (argb >> 8) & 0xff; jint b = (argb ) & 0xff;
r = mul8table[a][r]; g = mul8table[a][g]; b = mul8table[a][b
]; argb = (((((((a) << 8) | (r)) << 8) | (g)) <<
8) | (b)); } (pRGB)[5] = argb; } while (0); do { jint argb =
SrcReadLut[pRow[xwhole+xdelta1]]; jint a = (((juint) (argb))
>> (24)); if (a == 0) { argb = 0; } else if (a < 0xff
) { jint r = (argb >> 16) & 0xff; jint g = (argb >>
8) & 0xff; jint b = (argb ) & 0xff; r = mul8table[a]
[r]; g = mul8table[a][g]; b = mul8table[a][b]; argb = (((((((
a) << 8) | (r)) << 8) | (g)) << 8) | (b)); }
(pRGB)[6] = argb; } while (0); do { jint argb = SrcReadLut[pRow
[xwhole+xdelta2]]; jint a = (((juint) (argb)) >> (24));
if (a == 0) { argb = 0; } else if (a < 0xff) { jint r = (
argb >> 16) & 0xff; jint g = (argb >> 8) &
0xff; jint b = (argb ) & 0xff; r = mul8table[a][r]; g = mul8table
[a][g]; b = mul8table[a][b]; argb = (((((((a) << 8) | (
r)) << 8) | (g)) << 8) | (b)); } (pRGB)[7] = argb
; } while (0); pRow = ((void *) (((intptr_t) (pRow)) + (ydelta1
))); do { jint argb = SrcReadLut[pRow[xwhole+xdelta0]]; jint a
= (((juint) (argb)) >> (24)); if (a == 0) { argb = 0; }
else if (a < 0xff) { jint r = (argb >> 16) & 0xff
; jint g = (argb >> 8) & 0xff; jint b = (argb ) &
0xff; r = mul8table[a][r]; g = mul8table[a][g]; b = mul8table
[a][b]; argb = (((((((a) << 8) | (r)) << 8) | (g)
) << 8) | (b)); } (pRGB)[8] = argb; } while (0); do { jint
argb = SrcReadLut[pRow[xwhole]]; jint a = (((juint) (argb)) >>
(24)); if (a == 0) { argb = 0; } else if (a < 0xff) { jint
r = (argb >> 16) & 0xff; jint g = (argb >> 8
) & 0xff; jint b = (argb ) & 0xff; r = mul8table[a][r
]; g = mul8table[a][g]; b = mul8table[a][b]; argb = (((((((a)
<< 8) | (r)) << 8) | (g)) << 8) | (b)); } (
pRGB)[9] = argb; } while (0); do { jint argb = SrcReadLut[pRow
[xwhole+xdelta1]]; jint a = (((juint) (argb)) >> (24));
if (a == 0) { argb = 0; } else if (a < 0xff) { jint r = (
argb >> 16) & 0xff; jint g = (argb >> 8) &
0xff; jint b = (argb ) & 0xff; r = mul8table[a][r]; g = mul8table
[a][g]; b = mul8table[a][b]; argb = (((((((a) << 8) | (
r)) << 8) | (g)) << 8) | (b)); } (pRGB)[10] = argb
; } while (0); do { jint argb = SrcReadLut[pRow[xwhole+xdelta2
]]; jint a = (((juint) (argb)) >> (24)); if (a == 0) { argb
= 0; } else if (a < 0xff) { jint r = (argb >> 16) &
0xff; jint g = (argb >> 8) & 0xff; jint b = (argb )
& 0xff; r = mul8table[a][r]; g = mul8table[a][g]; b = mul8table
[a][b]; argb = (((((((a) << 8) | (r)) << 8) | (g)
) << 8) | (b)); } (pRGB)[11] = argb; } while (0); pRow =
((void *) (((intptr_t) (pRow)) + (ydelta2))); do { jint argb
= SrcReadLut[pRow[xwhole+xdelta0]]; jint a = (((juint) (argb
)) >> (24)); if (a == 0) { argb = 0; } else if (a < 0xff
) { jint r = (argb >> 16) & 0xff; jint g = (argb >>
8) & 0xff; jint b = (argb ) & 0xff; r = mul8table[a]
[r]; g = mul8table[a][g]; b = mul8table[a][b]; argb = (((((((
a) << 8) | (r)) << 8) | (g)) << 8) | (b)); }
(pRGB)[12] = argb; } while (0); do { jint argb = SrcReadLut[
pRow[xwhole]]; jint a = (((juint) (argb)) >> (24)); if (
a == 0) { argb = 0; } else if (a < 0xff) { jint r = (argb >>
16) & 0xff; jint g = (argb >> 8) & 0xff; jint b
= (argb ) & 0xff; r = mul8table[a][r]; g = mul8table[a][
g]; b = mul8table[a][b]; argb = (((((((a) << 8) | (r)) <<
8) | (g)) << 8) | (b)); } (pRGB)[13] = argb; } while (
0); do { jint argb = SrcReadLut[pRow[xwhole+xdelta1]]; jint a
= (((juint) (argb)) >> (24)); if (a == 0) { argb = 0; }
else if (a < 0xff) { jint r = (argb >> 16) & 0xff
; jint g = (argb >> 8) & 0xff; jint b = (argb ) &
0xff; r = mul8table[a][r]; g = mul8table[a][g]; b = mul8table
[a][b]; argb = (((((((a) << 8) | (r)) << 8) | (g)
) << 8) | (b)); } (pRGB)[14] = argb; } while (0); do { jint
argb = SrcReadLut[pRow[xwhole+xdelta2]]; jint a = (((juint) (
argb)) >> (24)); if (a == 0) { argb = 0; } else if (a <
0xff) { jint r = (argb >> 16) & 0xff; jint g = (argb
>> 8) & 0xff; jint b = (argb ) & 0xff; r = mul8table
[a][r]; g = mul8table[a][g]; b = mul8table[a][b]; argb = ((((
(((a) << 8) | (r)) << 8) | (g)) << 8) | (b)
); } (pRGB)[15] = argb; } while (0); pRGB += 16; xlong += dxlong
; ylong += dylong; } } TransformHelperFuncs ByteIndexedTransformHelperFuncs
= { ByteIndexedNrstNbrTransformHelper, ByteIndexedBilinearTransformHelper
, ByteIndexedBicubicTransformHelper, };
257
258DEFINE_TRANSFORMHELPERS(ByteIndexedBm)void ByteIndexedBmNrstNbrTransformHelper(SurfaceDataRasInfo *
pSrcInfo, jint *pRGB, jint numpix, jlong xlong, jlong dxlong,
jlong ylong, jlong dylong) { jint *SrcReadLut; ByteIndexedBmDataType
*pBase = pSrcInfo->rasBase; jint scan = pSrcInfo->scanStride
; jint *pEnd = pRGB + numpix; xlong += (((jlong) (pSrcInfo->
bounds.x1)) << 32); ylong += (((jlong) (pSrcInfo->bounds
.y1)) << 32); SrcReadLut = (pSrcInfo)->lutBase; while
(pRGB < pEnd) { ByteIndexedBmDataType *pRow = ((void *) (
((intptr_t) (pBase)) + (((intptr_t) (((jint) ((ylong) >>
32)))) * (scan)))); do { jint argb = SrcReadLut[pRow[((jint)
((xlong) >> 32))]]; (pRGB)[0] = argb & (argb >>
24); } while (0); pRGB++; xlong += dxlong; ylong += dylong; }
} void ByteIndexedBmBilinearTransformHelper(SurfaceDataRasInfo
*pSrcInfo, jint *pRGB, jint numpix, jlong xlong, jlong dxlong
, jlong ylong, jlong dylong) { jint *SrcReadLut; jint scan = pSrcInfo
->scanStride; jint cx, cy, cw, ch; jint *pEnd = pRGB + numpix
*4; cx = pSrcInfo->bounds.x1; cw = pSrcInfo->bounds.x2-
cx; cy = pSrcInfo->bounds.y1; ch = pSrcInfo->bounds.y2-
cy; xlong -= (((jlong) 1) << 31); ylong -= (((jlong) 1)
<< 31); SrcReadLut = (pSrcInfo)->lutBase; while (pRGB
< pEnd) { jint xwhole = ((jint) ((xlong) >> 32)); jint
ywhole = ((jint) ((ylong) >> 32)); jint xdelta, ydelta
, isneg; ByteIndexedBmDataType *pRow; xdelta = ((juint) (xwhole
+ 1 - cw)) >> 31; isneg = xwhole >> 31; xwhole -=
isneg; xdelta += isneg; ydelta = ((ywhole + 1 - ch) >>
31); isneg = ywhole >> 31; ywhole -= isneg; ydelta -= isneg
; ydelta &= scan; xwhole += cx; pRow = ((void *) (((intptr_t
) (pSrcInfo->rasBase)) + (((intptr_t) (ywhole + cy)) * (scan
)))); do { jint argb = SrcReadLut[pRow[xwhole]]; (pRGB)[0] = argb
& (argb >> 24); } while (0); do { jint argb = SrcReadLut
[pRow[xwhole+xdelta]]; (pRGB)[1] = argb & (argb >> 24
); } while (0); pRow = ((void *) (((intptr_t) (pRow)) + (ydelta
))); do { jint argb = SrcReadLut[pRow[xwhole]]; (pRGB)[2] = argb
& (argb >> 24); } while (0); do { jint argb = SrcReadLut
[pRow[xwhole+xdelta]]; (pRGB)[3] = argb & (argb >> 24
); } while (0); pRGB += 4; xlong += dxlong; ylong += dylong; }
} void ByteIndexedBmBicubicTransformHelper(SurfaceDataRasInfo
*pSrcInfo, jint *pRGB, jint numpix, jlong xlong, jlong dxlong
, jlong ylong, jlong dylong) { jint *SrcReadLut; jint scan = pSrcInfo
->scanStride; jint cx, cy, cw, ch; jint *pEnd = pRGB + numpix
*16; cx = pSrcInfo->bounds.x1; cw = pSrcInfo->bounds.x2
-cx; cy = pSrcInfo->bounds.y1; ch = pSrcInfo->bounds.y2
-cy; xlong -= (((jlong) 1) << 31); ylong -= (((jlong) 1
) << 31); SrcReadLut = (pSrcInfo)->lutBase; while (pRGB
< pEnd) { jint xwhole = ((jint) ((xlong) >> 32)); jint
ywhole = ((jint) ((ylong) >> 32)); jint xdelta0, xdelta1
, xdelta2; jint ydelta0, ydelta1, ydelta2; jint isneg; ByteIndexedBmDataType
*pRow; xdelta0 = (-xwhole) >> 31; xdelta1 = ((juint) (
xwhole + 1 - cw)) >> 31; xdelta2 = ((juint) (xwhole + 2
- cw)) >> 31; isneg = xwhole >> 31; xwhole -= isneg
; xdelta1 += isneg; xdelta2 += xdelta1; ydelta0 = ((-ywhole) >>
31) & (-scan); ydelta1 = ((ywhole + 1 - ch) >> 31)
& scan; ydelta2 = ((ywhole + 2 - ch) >> 31) & scan
; isneg = ywhole >> 31; ywhole -= isneg; ydelta1 += (isneg
& -scan); xwhole += cx; pRow = ((void *) (((intptr_t) (pSrcInfo
->rasBase)) + (((intptr_t) (ywhole + cy)) * (scan)))); pRow
= ((void *) (((intptr_t) (pRow)) + (ydelta0))); do { jint argb
= SrcReadLut[pRow[xwhole+xdelta0]]; (pRGB)[0] = argb & (
argb >> 24); } while (0); do { jint argb = SrcReadLut[pRow
[xwhole]]; (pRGB)[1] = argb & (argb >> 24); } while
(0); do { jint argb = SrcReadLut[pRow[xwhole+xdelta1]]; (pRGB
)[2] = argb & (argb >> 24); } while (0); do { jint argb
= SrcReadLut[pRow[xwhole+xdelta2]]; (pRGB)[3] = argb & (
argb >> 24); } while (0); pRow = ((void *) (((intptr_t)
(pRow)) + (-ydelta0))); do { jint argb = SrcReadLut[pRow[xwhole
+xdelta0]]; (pRGB)[4] = argb & (argb >> 24); } while
(0); do { jint argb = SrcReadLut[pRow[xwhole]]; (pRGB)[5] = argb
& (argb >> 24); } while (0); do { jint argb = SrcReadLut
[pRow[xwhole+xdelta1]]; (pRGB)[6] = argb & (argb >>
24); } while (0); do { jint argb = SrcReadLut[pRow[xwhole+xdelta2
]]; (pRGB)[7] = argb & (argb >> 24); } while (0); pRow
= ((void *) (((intptr_t) (pRow)) + (ydelta1))); do { jint argb
= SrcReadLut[pRow[xwhole+xdelta0]]; (pRGB)[8] = argb & (
argb >> 24); } while (0); do { jint argb = SrcReadLut[pRow
[xwhole]]; (pRGB)[9] = argb & (argb >> 24); } while
(0); do { jint argb = SrcReadLut[pRow[xwhole+xdelta1]]; (pRGB
)[10] = argb & (argb >> 24); } while (0); do { jint
argb = SrcReadLut[pRow[xwhole+xdelta2]]; (pRGB)[11] = argb &
(argb >> 24); } while (0); pRow = ((void *) (((intptr_t
) (pRow)) + (ydelta2))); do { jint argb = SrcReadLut[pRow[xwhole
+xdelta0]]; (pRGB)[12] = argb & (argb >> 24); } while
(0); do { jint argb = SrcReadLut[pRow[xwhole]]; (pRGB)[13] =
argb & (argb >> 24); } while (0); do { jint argb =
SrcReadLut[pRow[xwhole+xdelta1]]; (pRGB)[14] = argb & (argb
>> 24); } while (0); do { jint argb = SrcReadLut[pRow[
xwhole+xdelta2]]; (pRGB)[15] = argb & (argb >> 24);
} while (0); pRGB += 16; xlong += dxlong; ylong += dylong; }
} TransformHelperFuncs ByteIndexedBmTransformHelperFuncs = {
ByteIndexedBmNrstNbrTransformHelper, ByteIndexedBmBilinearTransformHelper
, ByteIndexedBmBicubicTransformHelper, };