/*
 * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

#include <stdlib.h>
#include <string.h>
#include <sys/utsname.h>
#include "GraphicsPrimitiveMgr.h"
#include "java2d_Mlib.h"

typedef struct {
    AnyFunc  *func_c;
    AnyFunc  *func_vis;
} AnyFunc_pair;

#define DEF_FUNC(x)    \
    void x();          \
    void ADD_SUFF(x)();

#define ADD_FUNC(x)    \
    { & x, & ADD_SUFF(x) }

/***************************************************************/

DEF_FUNC(AnyByteDrawGlyphList)
DEF_FUNC(AnyByteDrawGlyphListXor)
DEF_FUNC(AnyByteIsomorphicCopy)
DEF_FUNC(AnyByteIsomorphicScaleCopy)
DEF_FUNC(AnyByteIsomorphicXorCopy)
DEF_FUNC(AnyByteSetLine)
DEF_FUNC(AnyByteSetRect)
DEF_FUNC(AnyByteSetSpans)
DEF_FUNC(AnyByteXorLine)
DEF_FUNC(AnyByteXorRect)
DEF_FUNC(AnyByteXorSpans)
DEF_FUNC(AnyShortDrawGlyphList)
DEF_FUNC(AnyShortDrawGlyphListXor)
DEF_FUNC(AnyShortIsomorphicCopy)
DEF_FUNC(AnyShortIsomorphicScaleCopy)
DEF_FUNC(AnyShortIsomorphicXorCopy)
DEF_FUNC(AnyShortSetLine)
DEF_FUNC(AnyShortSetRect)
DEF_FUNC(AnyShortSetSpans)
DEF_FUNC(AnyShortXorLine)
DEF_FUNC(AnyShortXorRect)
DEF_FUNC(AnyShortXorSpans)
DEF_FUNC(Any3ByteDrawGlyphList)
DEF_FUNC(Any3ByteDrawGlyphListXor)
DEF_FUNC(Any3ByteIsomorphicCopy)
DEF_FUNC(Any3ByteIsomorphicScaleCopy)
DEF_FUNC(Any3ByteIsomorphicXorCopy)
DEF_FUNC(Any3ByteSetLine)
DEF_FUNC(Any3ByteSetRect)
DEF_FUNC(Any3ByteSetSpans)
DEF_FUNC(Any3ByteXorLine)
DEF_FUNC(Any3ByteXorRect)
DEF_FUNC(Any3ByteXorSpans)
DEF_FUNC(Any4ByteDrawGlyphList)
DEF_FUNC(Any4ByteDrawGlyphListXor)
DEF_FUNC(Any4ByteIsomorphicCopy)
DEF_FUNC(Any4ByteIsomorphicScaleCopy)
DEF_FUNC(Any4ByteIsomorphicXorCopy)
DEF_FUNC(Any4ByteSetLine)
DEF_FUNC(Any4ByteSetRect)
DEF_FUNC(Any4ByteSetSpans)
DEF_FUNC(Any4ByteXorLine)
DEF_FUNC(Any4ByteXorRect)
DEF_FUNC(Any4ByteXorSpans)
DEF_FUNC(AnyIntDrawGlyphList)
DEF_FUNC(AnyIntDrawGlyphListXor)
DEF_FUNC(AnyIntIsomorphicCopy)
DEF_FUNC(AnyIntIsomorphicScaleCopy)
DEF_FUNC(AnyIntIsomorphicXorCopy)
DEF_FUNC(AnyIntSetLine)
DEF_FUNC(AnyIntSetRect)
DEF_FUNC(AnyIntSetSpans)
DEF_FUNC(AnyIntXorLine)
DEF_FUNC(AnyIntXorRect)
DEF_FUNC(AnyIntXorSpans)
DEF_FUNC(ByteGrayAlphaMaskFill)
DEF_FUNC(ByteGrayDrawGlyphListAA)
DEF_FUNC(ByteGraySrcMaskFill)
DEF_FUNC(ByteGraySrcOverMaskFill)
DEF_FUNC(ByteGrayToIntArgbConvert)
DEF_FUNC(ByteGrayToIntArgbScaleConvert)
DEF_FUNC(ByteIndexedBmToByteGrayScaleXparOver)
DEF_FUNC(ByteIndexedBmToByteGrayXparBgCopy)
DEF_FUNC(ByteIndexedBmToByteGrayXparOver)
DEF_FUNC(ByteIndexedToByteGrayConvert)
DEF_FUNC(ByteIndexedToByteGrayScaleConvert)
DEF_FUNC(Index12GrayToByteGrayConvert)
DEF_FUNC(Index12GrayToByteGrayScaleConvert)
DEF_FUNC(Index8GrayToByteGrayConvert)
DEF_FUNC(Index8GrayToByteGrayScaleConvert)
DEF_FUNC(IntArgbBmToByteGrayScaleXparOver)
DEF_FUNC(IntArgbBmToByteGrayXparBgCopy)
DEF_FUNC(IntArgbBmToByteGrayXparOver)
DEF_FUNC(IntArgbToByteGrayAlphaMaskBlit)
DEF_FUNC(IntArgbToByteGrayConvert)
DEF_FUNC(IntArgbToByteGrayScaleConvert)
DEF_FUNC(IntArgbToByteGraySrcOverMaskBlit)
DEF_FUNC(IntArgbToByteGrayXorBlit)
DEF_FUNC(IntRgbToByteGrayAlphaMaskBlit)
DEF_FUNC(ThreeByteBgrToByteGrayConvert)
DEF_FUNC(ThreeByteBgrToByteGrayScaleConvert)
DEF_FUNC(UshortGrayToByteGrayConvert)
DEF_FUNC(UshortGrayToByteGrayScaleConvert)
DEF_FUNC(ByteGrayToUshortGrayConvert)
DEF_FUNC(ByteGrayToUshortGrayScaleConvert)
DEF_FUNC(ByteIndexedBmToUshortGrayScaleXparOver)
DEF_FUNC(ByteIndexedBmToUshortGrayXparBgCopy)
DEF_FUNC(ByteIndexedBmToUshortGrayXparOver)
DEF_FUNC(ByteIndexedToUshortGrayConvert)
DEF_FUNC(ByteIndexedToUshortGrayScaleConvert)
DEF_FUNC(IntArgbBmToUshortGrayScaleXparOver)
DEF_FUNC(IntArgbToUshortGrayAlphaMaskBlit)
DEF_FUNC(IntArgbToUshortGrayConvert)
DEF_FUNC(IntArgbToUshortGrayScaleConvert)
DEF_FUNC(IntArgbToUshortGraySrcOverMaskBlit)
DEF_FUNC(IntArgbToUshortGrayXorBlit)
DEF_FUNC(IntRgbToUshortGrayAlphaMaskBlit)
DEF_FUNC(ThreeByteBgrToUshortGrayConvert)
DEF_FUNC(ThreeByteBgrToUshortGrayScaleConvert)
DEF_FUNC(UshortGrayAlphaMaskFill)
DEF_FUNC(UshortGrayDrawGlyphListAA)
DEF_FUNC(UshortGraySrcMaskFill)
DEF_FUNC(UshortGraySrcOverMaskFill)
DEF_FUNC(UshortGrayToIntArgbConvert)
DEF_FUNC(UshortGrayToIntArgbScaleConvert)
DEF_FUNC(ByteGrayToByteIndexedConvert)
DEF_FUNC(ByteGrayToByteIndexedScaleConvert)
DEF_FUNC(ByteIndexedAlphaMaskFill)
DEF_FUNC(ByteIndexedBmToByteIndexedScaleXparOver)
DEF_FUNC(ByteIndexedBmToByteIndexedXparBgCopy)
DEF_FUNC(ByteIndexedBmToByteIndexedXparOver)
DEF_FUNC(ByteIndexedDrawGlyphListAA)
DEF_FUNC(ByteIndexedToByteIndexedConvert)
DEF_FUNC(ByteIndexedToByteIndexedScaleConvert)
DEF_FUNC(Index12GrayToByteIndexedConvert)
DEF_FUNC(Index12GrayToByteIndexedScaleConvert)
DEF_FUNC(IntArgbBmToByteIndexedScaleXparOver)
DEF_FUNC(IntArgbBmToByteIndexedXparBgCopy)
DEF_FUNC(IntArgbBmToByteIndexedXparOver)
DEF_FUNC(IntArgbToByteIndexedAlphaMaskBlit)
DEF_FUNC(IntArgbToByteIndexedConvert)
DEF_FUNC(IntArgbToByteIndexedScaleConvert)
DEF_FUNC(IntArgbToByteIndexedXorBlit)
DEF_FUNC(IntRgbToByteIndexedAlphaMaskBlit)
DEF_FUNC(ThreeByteBgrToByteIndexedConvert)
DEF_FUNC(ThreeByteBgrToByteIndexedScaleConvert)
DEF_FUNC(ByteGrayToFourByteAbgrConvert)
DEF_FUNC(ByteGrayToFourByteAbgrScaleConvert)
DEF_FUNC(ByteIndexedBmToFourByteAbgrScaleXparOver)
DEF_FUNC(ByteIndexedBmToFourByteAbgrXparBgCopy)
DEF_FUNC(ByteIndexedBmToFourByteAbgrXparOver)
DEF_FUNC(ByteIndexedToFourByteAbgrConvert)
DEF_FUNC(ByteIndexedToFourByteAbgrScaleConvert)
DEF_FUNC(FourByteAbgrAlphaMaskFill)
DEF_FUNC(FourByteAbgrDrawGlyphListAA)
DEF_FUNC(FourByteAbgrSrcMaskFill)
DEF_FUNC(FourByteAbgrSrcOverMaskFill)
DEF_FUNC(FourByteAbgrToIntArgbConvert)
DEF_FUNC(FourByteAbgrToIntArgbScaleConvert)
DEF_FUNC(IntArgbBmToFourByteAbgrScaleXparOver)
DEF_FUNC(IntArgbToFourByteAbgrAlphaMaskBlit)
DEF_FUNC(IntArgbToFourByteAbgrConvert)
DEF_FUNC(IntArgbToFourByteAbgrScaleConvert)
DEF_FUNC(IntArgbToFourByteAbgrSrcOverMaskBlit)
DEF_FUNC(IntArgbToFourByteAbgrXorBlit)
DEF_FUNC(IntRgbToFourByteAbgrAlphaMaskBlit)
DEF_FUNC(IntRgbToFourByteAbgrConvert)
DEF_FUNC(IntRgbToFourByteAbgrScaleConvert)
DEF_FUNC(ThreeByteBgrToFourByteAbgrConvert)
DEF_FUNC(ThreeByteBgrToFourByteAbgrScaleConvert)
DEF_FUNC(ByteGrayToFourByteAbgrPreConvert)
DEF_FUNC(ByteGrayToFourByteAbgrPreScaleConvert)
DEF_FUNC(ByteIndexedBmToFourByteAbgrPreScaleXparOver)
DEF_FUNC(ByteIndexedBmToFourByteAbgrPreXparBgCopy)
DEF_FUNC(ByteIndexedBmToFourByteAbgrPreXparOver)
DEF_FUNC(ByteIndexedToFourByteAbgrPreConvert)
DEF_FUNC(ByteIndexedToFourByteAbgrPreScaleConvert)
DEF_FUNC(FourByteAbgrPreAlphaMaskFill)
DEF_FUNC(FourByteAbgrPreDrawGlyphListAA)
DEF_FUNC(FourByteAbgrPreSrcMaskFill)
DEF_FUNC(FourByteAbgrPreSrcOverMaskFill)
DEF_FUNC(FourByteAbgrPreToIntArgbConvert)
DEF_FUNC(FourByteAbgrPreToIntArgbScaleConvert)
DEF_FUNC(IntArgbBmToFourByteAbgrPreScaleXparOver)
DEF_FUNC(IntArgbToFourByteAbgrPreAlphaMaskBlit)
DEF_FUNC(IntArgbToFourByteAbgrPreConvert)
DEF_FUNC(IntArgbToFourByteAbgrPreScaleConvert)
DEF_FUNC(IntArgbToFourByteAbgrPreSrcOverMaskBlit)
DEF_FUNC(IntArgbToFourByteAbgrPreXorBlit)
DEF_FUNC(IntRgbToFourByteAbgrPreAlphaMaskBlit)
DEF_FUNC(IntRgbToFourByteAbgrPreConvert)
DEF_FUNC(IntRgbToFourByteAbgrPreScaleConvert)
DEF_FUNC(ThreeByteBgrToFourByteAbgrPreConvert)
DEF_FUNC(ThreeByteBgrToFourByteAbgrPreScaleConvert)
DEF_FUNC(ByteIndexedBmToIntArgbScaleXparOver)
DEF_FUNC(ByteIndexedBmToIntArgbXparBgCopy)
DEF_FUNC(ByteIndexedBmToIntArgbXparOver)
DEF_FUNC(ByteIndexedToIntArgbConvert)
DEF_FUNC(ByteIndexedToIntArgbScaleConvert)
DEF_FUNC(Index12GrayToIntArgbConvert)
DEF_FUNC(IntArgbAlphaMaskFill)
DEF_FUNC(IntArgbBmToIntArgbScaleXparOver)
DEF_FUNC(IntArgbDrawGlyphListAA)
DEF_FUNC(IntArgbSrcMaskFill)
DEF_FUNC(IntArgbSrcOverMaskFill)
DEF_FUNC(IntArgbToIntArgbAlphaMaskBlit)
DEF_FUNC(IntArgbToIntArgbSrcOverMaskBlit)
DEF_FUNC(IntArgbToIntArgbXorBlit)
DEF_FUNC(IntRgbToIntArgbAlphaMaskBlit)
DEF_FUNC(ByteIndexedBmToIntArgbBmScaleXparOver)
DEF_FUNC(ByteIndexedBmToIntArgbBmXparBgCopy)
DEF_FUNC(ByteIndexedBmToIntArgbBmXparOver)
DEF_FUNC(ByteIndexedToIntArgbBmConvert)
DEF_FUNC(ByteIndexedToIntArgbBmScaleConvert)
DEF_FUNC(IntArgbBmAlphaMaskFill)
DEF_FUNC(IntArgbBmDrawGlyphListAA)
DEF_FUNC(IntArgbBmToIntArgbConvert)
DEF_FUNC(IntArgbToIntArgbBmAlphaMaskBlit)
DEF_FUNC(IntArgbToIntArgbBmConvert)
DEF_FUNC(IntArgbToIntArgbBmScaleConvert)
DEF_FUNC(IntArgbToIntArgbBmXorBlit)
DEF_FUNC(ByteGrayToIntArgbPreConvert)
DEF_FUNC(ByteGrayToIntArgbPreScaleConvert)
DEF_FUNC(ByteIndexedBmToIntArgbPreScaleXparOver)
DEF_FUNC(ByteIndexedBmToIntArgbPreXparBgCopy)
DEF_FUNC(ByteIndexedBmToIntArgbPreXparOver)
DEF_FUNC(ByteIndexedToIntArgbPreConvert)
DEF_FUNC(ByteIndexedToIntArgbPreScaleConvert)
DEF_FUNC(IntArgbPreAlphaMaskFill)
DEF_FUNC(IntArgbPreDrawGlyphListAA)
DEF_FUNC(IntArgbPreSrcMaskFill)
DEF_FUNC(IntArgbPreSrcOverMaskFill)
DEF_FUNC(IntArgbPreToIntArgbConvert)
DEF_FUNC(IntArgbPreToIntArgbScaleConvert)
DEF_FUNC(IntArgbToIntArgbPreAlphaMaskBlit)
DEF_FUNC(IntArgbToIntArgbPreConvert)
DEF_FUNC(IntArgbToIntArgbPreScaleConvert)
DEF_FUNC(IntArgbToIntArgbPreSrcOverMaskBlit)
DEF_FUNC(IntArgbToIntArgbPreXorBlit)
DEF_FUNC(IntRgbToIntArgbPreAlphaMaskBlit)
DEF_FUNC(IntRgbToIntArgbPreConvert)
DEF_FUNC(IntRgbToIntArgbPreScaleConvert)
DEF_FUNC(ThreeByteBgrToIntArgbPreConvert)
DEF_FUNC(ThreeByteBgrToIntArgbPreScaleConvert)
DEF_FUNC(ByteIndexedBmToIntBgrScaleXparOver)
DEF_FUNC(ByteIndexedBmToIntBgrXparBgCopy)
DEF_FUNC(ByteIndexedBmToIntBgrXparOver)
DEF_FUNC(ByteIndexedToIntBgrConvert)
DEF_FUNC(ByteIndexedToIntBgrScaleConvert)
DEF_FUNC(IntArgbBmToIntBgrScaleXparOver)
DEF_FUNC(IntArgbBmToIntBgrXparBgCopy)
DEF_FUNC(IntArgbBmToIntBgrXparOver)
DEF_FUNC(IntArgbToIntBgrAlphaMaskBlit)
DEF_FUNC(IntArgbToIntBgrConvert)
DEF_FUNC(IntArgbToIntBgrScaleConvert)
DEF_FUNC(IntArgbToIntBgrSrcOverMaskBlit)
DEF_FUNC(IntArgbToIntBgrXorBlit)
DEF_FUNC(IntBgrAlphaMaskFill)
DEF_FUNC(IntBgrDrawGlyphListAA)
DEF_FUNC(IntBgrSrcMaskFill)
DEF_FUNC(IntBgrSrcOverMaskFill)
DEF_FUNC(IntBgrToIntArgbConvert)
DEF_FUNC(IntBgrToIntArgbScaleConvert)
DEF_FUNC(IntBgrToIntBgrAlphaMaskBlit)
DEF_FUNC(IntRgbToIntBgrAlphaMaskBlit)
DEF_FUNC(ThreeByteBgrToIntBgrConvert)
DEF_FUNC(ThreeByteBgrToIntBgrScaleConvert)
DEF_FUNC(ByteGrayToIntRgbConvert)
DEF_FUNC(ByteGrayToIntRgbScaleConvert)
DEF_FUNC(IntArgbBmToIntRgbXparBgCopy)
DEF_FUNC(IntArgbBmToIntRgbXparOver)
DEF_FUNC(IntArgbToIntRgbAlphaMaskBlit)
DEF_FUNC(IntArgbToIntRgbSrcOverMaskBlit)
DEF_FUNC(IntArgbToIntRgbXorBlit)
DEF_FUNC(IntRgbAlphaMaskFill)
DEF_FUNC(IntRgbDrawGlyphListAA)
DEF_FUNC(IntRgbSrcMaskFill)
DEF_FUNC(IntRgbSrcOverMaskFill)
DEF_FUNC(IntRgbToIntArgbConvert)
DEF_FUNC(IntRgbToIntArgbScaleConvert)
DEF_FUNC(IntRgbToIntRgbAlphaMaskBlit)
DEF_FUNC(ThreeByteBgrToIntRgbConvert)
DEF_FUNC(ThreeByteBgrToIntRgbScaleConvert)
DEF_FUNC(ByteGrayToIntRgbxConvert)
DEF_FUNC(ByteGrayToIntRgbxScaleConvert)
DEF_FUNC(ByteIndexedBmToIntRgbxScaleXparOver)
DEF_FUNC(ByteIndexedBmToIntRgbxXparBgCopy)
DEF_FUNC(ByteIndexedBmToIntRgbxXparOver)
DEF_FUNC(ByteIndexedToIntRgbxConvert)
DEF_FUNC(ByteIndexedToIntRgbxScaleConvert)
DEF_FUNC(IntArgbBmToIntRgbxScaleXparOver)
DEF_FUNC(IntArgbToIntRgbxConvert)
DEF_FUNC(IntArgbToIntRgbxScaleConvert)
DEF_FUNC(IntArgbToIntRgbxXorBlit)
DEF_FUNC(IntRgbxDrawGlyphListAA)
DEF_FUNC(IntRgbxToIntArgbConvert)
DEF_FUNC(IntRgbxToIntArgbScaleConvert)
DEF_FUNC(ThreeByteBgrToIntRgbxConvert)
DEF_FUNC(ThreeByteBgrToIntRgbxScaleConvert)
DEF_FUNC(ByteGrayToThreeByteBgrConvert)
DEF_FUNC(ByteGrayToThreeByteBgrScaleConvert)
DEF_FUNC(ByteIndexedBmToThreeByteBgrScaleXparOver)
DEF_FUNC(ByteIndexedBmToThreeByteBgrXparBgCopy)
DEF_FUNC(ByteIndexedBmToThreeByteBgrXparOver)
DEF_FUNC(ByteIndexedToThreeByteBgrConvert)
DEF_FUNC(ByteIndexedToThreeByteBgrScaleConvert)
DEF_FUNC(IntArgbBmToThreeByteBgrScaleXparOver)
DEF_FUNC(IntArgbBmToThreeByteBgrXparBgCopy)
DEF_FUNC(IntArgbBmToThreeByteBgrXparOver)
DEF_FUNC(IntArgbToThreeByteBgrAlphaMaskBlit)
DEF_FUNC(IntArgbToThreeByteBgrConvert)
DEF_FUNC(IntArgbToThreeByteBgrScaleConvert)
DEF_FUNC(IntArgbToThreeByteBgrSrcOverMaskBlit)
DEF_FUNC(IntArgbToThreeByteBgrXorBlit)
DEF_FUNC(IntRgbToThreeByteBgrAlphaMaskBlit)
DEF_FUNC(ThreeByteBgrAlphaMaskFill)
DEF_FUNC(ThreeByteBgrDrawGlyphListAA)
DEF_FUNC(ThreeByteBgrSrcMaskFill)
DEF_FUNC(ThreeByteBgrSrcOverMaskFill)
DEF_FUNC(ThreeByteBgrToIntArgbConvert)
DEF_FUNC(ThreeByteBgrToIntArgbScaleConvert)
DEF_FUNC(ByteGrayToIndex8GrayConvert)
DEF_FUNC(ByteGrayToIndex8GrayScaleConvert)
DEF_FUNC(ByteIndexedBmToIndex8GrayXparBgCopy)
DEF_FUNC(ByteIndexedBmToIndex8GrayXparOver)
DEF_FUNC(ByteIndexedToIndex8GrayConvert)
DEF_FUNC(ByteIndexedToIndex8GrayScaleConvert)
DEF_FUNC(Index12GrayToIndex8GrayConvert)
DEF_FUNC(Index12GrayToIndex8GrayScaleConvert)
DEF_FUNC(Index8GrayAlphaMaskFill)
DEF_FUNC(Index8GrayDrawGlyphListAA)
DEF_FUNC(Index8GraySrcOverMaskFill)
DEF_FUNC(Index8GrayToIndex8GrayConvert)
DEF_FUNC(Index8GrayToIndex8GrayScaleConvert)
DEF_FUNC(IntArgbToIndex8GrayAlphaMaskBlit)
DEF_FUNC(IntArgbToIndex8GrayConvert)
DEF_FUNC(IntArgbToIndex8GrayScaleConvert)
DEF_FUNC(IntArgbToIndex8GraySrcOverMaskBlit)
DEF_FUNC(IntArgbToIndex8GrayXorBlit)
DEF_FUNC(IntRgbToIndex8GrayAlphaMaskBlit)
DEF_FUNC(ThreeByteBgrToIndex8GrayConvert)
DEF_FUNC(ThreeByteBgrToIndex8GrayScaleConvert)
DEF_FUNC(UshortGrayToIndex8GrayScaleConvert)
DEF_FUNC(ByteGrayToIndex12GrayConvert)
DEF_FUNC(ByteGrayToIndex12GrayScaleConvert)
DEF_FUNC(ByteIndexedBmToIndex12GrayXparBgCopy)
DEF_FUNC(ByteIndexedBmToIndex12GrayXparOver)
DEF_FUNC(ByteIndexedToIndex12GrayConvert)
DEF_FUNC(ByteIndexedToIndex12GrayScaleConvert)
DEF_FUNC(Index12GrayAlphaMaskFill)
DEF_FUNC(Index12GrayDrawGlyphListAA)
DEF_FUNC(Index12GraySrcOverMaskFill)
DEF_FUNC(Index12GrayToIndex12GrayConvert)
DEF_FUNC(Index12GrayToIndex12GrayScaleConvert)
DEF_FUNC(Index12GrayToIntArgbScaleConvert)
DEF_FUNC(Index8GrayToIndex12GrayConvert)
DEF_FUNC(Index8GrayToIndex12GrayScaleConvert)
DEF_FUNC(IntArgbToIndex12GrayAlphaMaskBlit)
DEF_FUNC(IntArgbToIndex12GrayConvert)
DEF_FUNC(IntArgbToIndex12GrayScaleConvert)
DEF_FUNC(IntArgbToIndex12GraySrcOverMaskBlit)
DEF_FUNC(IntArgbToIndex12GrayXorBlit)
DEF_FUNC(IntRgbToIndex12GrayAlphaMaskBlit)
DEF_FUNC(ThreeByteBgrToIndex12GrayConvert)
DEF_FUNC(ThreeByteBgrToIndex12GrayScaleConvert)
DEF_FUNC(UshortGrayToIndex12GrayScaleConvert)
DEF_FUNC(ByteBinary1BitAlphaMaskFill)
DEF_FUNC(ByteBinary1BitDrawGlyphList)
DEF_FUNC(ByteBinary1BitDrawGlyphListAA)
DEF_FUNC(ByteBinary1BitDrawGlyphListXor)
DEF_FUNC(ByteBinary1BitSetLine)
DEF_FUNC(ByteBinary1BitSetRect)
DEF_FUNC(ByteBinary1BitSetSpans)
DEF_FUNC(ByteBinary1BitToByteBinary1BitConvert)
DEF_FUNC(ByteBinary1BitToIntArgbAlphaMaskBlit)
DEF_FUNC(ByteBinary1BitToIntArgbConvert)
DEF_FUNC(ByteBinary1BitXorLine)
DEF_FUNC(ByteBinary1BitXorRect)
DEF_FUNC(ByteBinary1BitXorSpans)
DEF_FUNC(IntArgbToByteBinary1BitAlphaMaskBlit)
DEF_FUNC(IntArgbToByteBinary1BitConvert)
DEF_FUNC(IntArgbToByteBinary1BitXorBlit)
DEF_FUNC(ByteBinary2BitAlphaMaskFill)
DEF_FUNC(ByteBinary2BitDrawGlyphList)
DEF_FUNC(ByteBinary2BitDrawGlyphListAA)
DEF_FUNC(ByteBinary2BitDrawGlyphListXor)
DEF_FUNC(ByteBinary2BitSetLine)
DEF_FUNC(ByteBinary2BitSetRect)
DEF_FUNC(ByteBinary2BitSetSpans)
DEF_FUNC(ByteBinary2BitToByteBinary2BitConvert)
DEF_FUNC(ByteBinary2BitToIntArgbAlphaMaskBlit)
DEF_FUNC(ByteBinary2BitToIntArgbConvert)
DEF_FUNC(ByteBinary2BitXorLine)
DEF_FUNC(ByteBinary2BitXorRect)
DEF_FUNC(ByteBinary2BitXorSpans)
DEF_FUNC(IntArgbToByteBinary2BitAlphaMaskBlit)
DEF_FUNC(IntArgbToByteBinary2BitConvert)
DEF_FUNC(IntArgbToByteBinary2BitXorBlit)
DEF_FUNC(ByteBinary4BitAlphaMaskFill)
DEF_FUNC(ByteBinary4BitDrawGlyphList)
DEF_FUNC(ByteBinary4BitDrawGlyphListAA)
DEF_FUNC(ByteBinary4BitDrawGlyphListXor)
DEF_FUNC(ByteBinary4BitSetLine)
DEF_FUNC(ByteBinary4BitSetRect)
DEF_FUNC(ByteBinary4BitSetSpans)
DEF_FUNC(ByteBinary4BitToByteBinary4BitConvert)
DEF_FUNC(ByteBinary4BitToIntArgbAlphaMaskBlit)
DEF_FUNC(ByteBinary4BitToIntArgbConvert)
DEF_FUNC(ByteBinary4BitXorLine)
DEF_FUNC(ByteBinary4BitXorRect)
DEF_FUNC(ByteBinary4BitXorSpans)
DEF_FUNC(IntArgbToByteBinary4BitAlphaMaskBlit)
DEF_FUNC(IntArgbToByteBinary4BitConvert)
DEF_FUNC(IntArgbToByteBinary4BitXorBlit)
DEF_FUNC(ByteGrayToUshort555RgbConvert)
DEF_FUNC(ByteGrayToUshort555RgbScaleConvert)
DEF_FUNC(ByteIndexedBmToUshort555RgbScaleXparOver)
DEF_FUNC(ByteIndexedBmToUshort555RgbXparBgCopy)
DEF_FUNC(ByteIndexedBmToUshort555RgbXparOver)
DEF_FUNC(ByteIndexedToUshort555RgbConvert)
DEF_FUNC(ByteIndexedToUshort555RgbScaleConvert)
DEF_FUNC(IntArgbBmToUshort555RgbScaleXparOver)
DEF_FUNC(IntArgbBmToUshort555RgbXparBgCopy)
DEF_FUNC(IntArgbBmToUshort555RgbXparOver)
DEF_FUNC(IntArgbToUshort555RgbAlphaMaskBlit)
DEF_FUNC(IntArgbToUshort555RgbConvert)
DEF_FUNC(IntArgbToUshort555RgbScaleConvert)
DEF_FUNC(IntArgbToUshort555RgbSrcOverMaskBlit)
DEF_FUNC(IntArgbToUshort555RgbXorBlit)
DEF_FUNC(IntRgbToUshort555RgbAlphaMaskBlit)
DEF_FUNC(ThreeByteBgrToUshort555RgbConvert)
DEF_FUNC(ThreeByteBgrToUshort555RgbScaleConvert)
DEF_FUNC(Ushort555RgbAlphaMaskFill)
DEF_FUNC(Ushort555RgbDrawGlyphListAA)
DEF_FUNC(Ushort555RgbSrcMaskFill)
DEF_FUNC(Ushort555RgbSrcOverMaskFill)
DEF_FUNC(Ushort555RgbToIntArgbConvert)
DEF_FUNC(Ushort555RgbToIntArgbScaleConvert)
DEF_FUNC(ByteGrayToUshort555RgbxConvert)
DEF_FUNC(ByteGrayToUshort555RgbxScaleConvert)
DEF_FUNC(ByteIndexedBmToUshort555RgbxScaleXparOver)
DEF_FUNC(ByteIndexedBmToUshort555RgbxXparBgCopy)
DEF_FUNC(ByteIndexedBmToUshort555RgbxXparOver)
DEF_FUNC(ByteIndexedToUshort555RgbxConvert)
DEF_FUNC(ByteIndexedToUshort555RgbxScaleConvert)
DEF_FUNC(IntArgbBmToUshort555RgbxScaleXparOver)
DEF_FUNC(IntArgbToUshort555RgbxConvert)
DEF_FUNC(IntArgbToUshort555RgbxScaleConvert)
DEF_FUNC(IntArgbToUshort555RgbxXorBlit)
DEF_FUNC(ThreeByteBgrToUshort555RgbxConvert)
DEF_FUNC(ThreeByteBgrToUshort555RgbxScaleConvert)
DEF_FUNC(Ushort555RgbxDrawGlyphListAA)
DEF_FUNC(Ushort555RgbxToIntArgbConvert)
DEF_FUNC(Ushort555RgbxToIntArgbScaleConvert)
DEF_FUNC(ByteGrayToUshort565RgbConvert)
DEF_FUNC(ByteGrayToUshort565RgbScaleConvert)
DEF_FUNC(ByteIndexedBmToUshort565RgbScaleXparOver)
DEF_FUNC(ByteIndexedBmToUshort565RgbXparBgCopy)
DEF_FUNC(ByteIndexedBmToUshort565RgbXparOver)
DEF_FUNC(ByteIndexedToUshort565RgbConvert)
DEF_FUNC(ByteIndexedToUshort565RgbScaleConvert)
DEF_FUNC(IntArgbBmToUshort565RgbScaleXparOver)
DEF_FUNC(IntArgbBmToUshort565RgbXparBgCopy)
DEF_FUNC(IntArgbBmToUshort565RgbXparOver)
DEF_FUNC(IntArgbToUshort565RgbAlphaMaskBlit)
DEF_FUNC(IntArgbToUshort565RgbConvert)
DEF_FUNC(IntArgbToUshort565RgbScaleConvert)
DEF_FUNC(IntArgbToUshort565RgbSrcOverMaskBlit)
DEF_FUNC(IntArgbToUshort565RgbXorBlit)
DEF_FUNC(IntRgbToUshort565RgbAlphaMaskBlit)
DEF_FUNC(ThreeByteBgrToUshort565RgbConvert)
DEF_FUNC(ThreeByteBgrToUshort565RgbScaleConvert)
DEF_FUNC(Ushort565RgbAlphaMaskFill)
DEF_FUNC(Ushort565RgbDrawGlyphListAA)
DEF_FUNC(Ushort565RgbSrcMaskFill)
DEF_FUNC(Ushort565RgbSrcOverMaskFill)
DEF_FUNC(Ushort565RgbToIntArgbConvert)
DEF_FUNC(Ushort565RgbToIntArgbScaleConvert)

/***************************************************************/

static AnyFunc_pair vis_func_pair_array[] = {
    ADD_FUNC(AnyByteDrawGlyphList),
    ADD_FUNC(AnyByteDrawGlyphListXor),
    ADD_FUNC(AnyByteIsomorphicCopy),
    ADD_FUNC(AnyByteIsomorphicScaleCopy),
    ADD_FUNC(AnyByteIsomorphicXorCopy),
    ADD_FUNC(AnyByteSetLine),
    ADD_FUNC(AnyByteSetRect),
    ADD_FUNC(AnyByteSetSpans),
    ADD_FUNC(AnyByteXorLine),
    ADD_FUNC(AnyByteXorRect),
    ADD_FUNC(AnyByteXorSpans),
    ADD_FUNC(AnyShortDrawGlyphList),
    ADD_FUNC(AnyShortDrawGlyphListXor),
    ADD_FUNC(AnyShortIsomorphicCopy),
    ADD_FUNC(AnyShortIsomorphicScaleCopy),
    ADD_FUNC(AnyShortIsomorphicXorCopy),
    ADD_FUNC(AnyShortSetLine),
    ADD_FUNC(AnyShortSetRect),
    ADD_FUNC(AnyShortSetSpans),
    ADD_FUNC(AnyShortXorLine),
    ADD_FUNC(AnyShortXorRect),
    ADD_FUNC(AnyShortXorSpans),
    ADD_FUNC(Any3ByteIsomorphicCopy),
    ADD_FUNC(Any3ByteIsomorphicScaleCopy),
    ADD_FUNC(Any3ByteIsomorphicXorCopy),
    ADD_FUNC(Any3ByteSetLine),
    ADD_FUNC(Any3ByteSetRect),
    ADD_FUNC(Any3ByteSetSpans),
    ADD_FUNC(Any3ByteXorLine),
    ADD_FUNC(Any3ByteXorRect),
    ADD_FUNC(Any3ByteXorSpans),
    ADD_FUNC(Any4ByteDrawGlyphList),
    ADD_FUNC(Any4ByteDrawGlyphListXor),
    ADD_FUNC(Any4ByteIsomorphicCopy),
    ADD_FUNC(Any4ByteIsomorphicScaleCopy),
    ADD_FUNC(Any4ByteIsomorphicXorCopy),
    ADD_FUNC(Any4ByteSetLine),
    ADD_FUNC(Any4ByteSetRect),
    ADD_FUNC(Any4ByteSetSpans),
    ADD_FUNC(Any4ByteXorLine),
    ADD_FUNC(Any4ByteXorRect),
    ADD_FUNC(Any4ByteXorSpans),
    ADD_FUNC(AnyIntDrawGlyphList),
    ADD_FUNC(AnyIntDrawGlyphListXor),
    ADD_FUNC(AnyIntIsomorphicCopy),
    ADD_FUNC(AnyIntIsomorphicScaleCopy),
    ADD_FUNC(AnyIntIsomorphicXorCopy),
    ADD_FUNC(AnyIntSetLine),
    ADD_FUNC(AnyIntSetRect),
    ADD_FUNC(AnyIntSetSpans),
    ADD_FUNC(AnyIntXorLine),
    ADD_FUNC(AnyIntXorRect),
    ADD_FUNC(AnyIntXorSpans),
    ADD_FUNC(ByteGrayAlphaMaskFill),
    ADD_FUNC(ByteGrayDrawGlyphListAA),
    ADD_FUNC(ByteGraySrcMaskFill),
    ADD_FUNC(ByteGraySrcOverMaskFill),
    ADD_FUNC(ByteGrayToIntArgbConvert),
    ADD_FUNC(ByteGrayToIntArgbScaleConvert),
    ADD_FUNC(ByteIndexedBmToByteGrayScaleXparOver),
    ADD_FUNC(ByteIndexedBmToByteGrayXparBgCopy),
    ADD_FUNC(ByteIndexedBmToByteGrayXparOver),
    ADD_FUNC(ByteIndexedToByteGrayConvert),
    ADD_FUNC(ByteIndexedToByteGrayScaleConvert),
    ADD_FUNC(Index12GrayToByteGrayConvert),
    ADD_FUNC(Index12GrayToByteGrayScaleConvert),
    ADD_FUNC(Index8GrayToByteGrayConvert),
    ADD_FUNC(Index8GrayToByteGrayScaleConvert),
    ADD_FUNC(IntArgbBmToByteGrayScaleXparOver),
    ADD_FUNC(IntArgbBmToByteGrayXparBgCopy),
    ADD_FUNC(IntArgbBmToByteGrayXparOver),
    ADD_FUNC(IntArgbToByteGrayAlphaMaskBlit),
    ADD_FUNC(IntArgbToByteGrayConvert),
    ADD_FUNC(IntArgbToByteGrayScaleConvert),
    ADD_FUNC(IntArgbToByteGraySrcOverMaskBlit),
    ADD_FUNC(IntArgbToByteGrayXorBlit),
    ADD_FUNC(IntRgbToByteGrayAlphaMaskBlit),
    ADD_FUNC(ThreeByteBgrToByteGrayConvert),
    ADD_FUNC(ThreeByteBgrToByteGrayScaleConvert),
    ADD_FUNC(UshortGrayToByteGrayConvert),
    ADD_FUNC(UshortGrayToByteGrayScaleConvert),
    ADD_FUNC(ByteGrayToUshortGrayConvert),
    ADD_FUNC(ByteGrayToUshortGrayScaleConvert),
    ADD_FUNC(ByteIndexedBmToUshortGrayScaleXparOver),
    ADD_FUNC(ByteIndexedBmToUshortGrayXparBgCopy),
    ADD_FUNC(ByteIndexedBmToUshortGrayXparOver),
    ADD_FUNC(ByteIndexedToUshortGrayConvert),
    ADD_FUNC(ByteIndexedToUshortGrayScaleConvert),
    ADD_FUNC(IntArgbBmToUshortGrayScaleXparOver),
    ADD_FUNC(IntArgbToUshortGrayConvert),
    ADD_FUNC(IntArgbToUshortGrayScaleConvert),
    ADD_FUNC(ThreeByteBgrToUshortGrayConvert),
    ADD_FUNC(ThreeByteBgrToUshortGrayScaleConvert),
    ADD_FUNC(UshortGrayToIntArgbConvert),
    ADD_FUNC(UshortGrayToIntArgbScaleConvert),
    ADD_FUNC(ByteGrayToByteIndexedConvert),
    ADD_FUNC(ByteGrayToByteIndexedScaleConvert),
    ADD_FUNC(ByteIndexedBmToByteIndexedScaleXparOver),
    ADD_FUNC(ByteIndexedBmToByteIndexedXparBgCopy),
    ADD_FUNC(ByteIndexedBmToByteIndexedXparOver),
    ADD_FUNC(ByteIndexedToByteIndexedConvert),
    ADD_FUNC(ByteIndexedToByteIndexedScaleConvert),
    ADD_FUNC(Index12GrayToByteIndexedConvert),
    ADD_FUNC(Index12GrayToByteIndexedScaleConvert),
    ADD_FUNC(IntArgbBmToByteIndexedScaleXparOver),
    ADD_FUNC(IntArgbBmToByteIndexedXparBgCopy),
    ADD_FUNC(IntArgbBmToByteIndexedXparOver),
    ADD_FUNC(IntArgbToByteIndexedConvert),
    ADD_FUNC(IntArgbToByteIndexedScaleConvert),
    ADD_FUNC(IntArgbToByteIndexedXorBlit),
    ADD_FUNC(ThreeByteBgrToByteIndexedConvert),
    ADD_FUNC(ThreeByteBgrToByteIndexedScaleConvert),
    ADD_FUNC(ByteGrayToFourByteAbgrConvert),
    ADD_FUNC(ByteGrayToFourByteAbgrScaleConvert),
    ADD_FUNC(ByteIndexedBmToFourByteAbgrScaleXparOver),
    ADD_FUNC(ByteIndexedBmToFourByteAbgrXparBgCopy),
    ADD_FUNC(ByteIndexedBmToFourByteAbgrXparOver),
    ADD_FUNC(ByteIndexedToFourByteAbgrConvert),
    ADD_FUNC(ByteIndexedToFourByteAbgrScaleConvert),
    ADD_FUNC(FourByteAbgrAlphaMaskFill),
    ADD_FUNC(FourByteAbgrDrawGlyphListAA),
    ADD_FUNC(FourByteAbgrSrcMaskFill),
    ADD_FUNC(FourByteAbgrSrcOverMaskFill),
    ADD_FUNC(FourByteAbgrToIntArgbConvert),
    ADD_FUNC(FourByteAbgrToIntArgbScaleConvert),
    ADD_FUNC(IntArgbBmToFourByteAbgrScaleXparOver),
    ADD_FUNC(IntArgbToFourByteAbgrAlphaMaskBlit),
    ADD_FUNC(IntArgbToFourByteAbgrConvert),
    ADD_FUNC(IntArgbToFourByteAbgrScaleConvert),
    ADD_FUNC(IntArgbToFourByteAbgrSrcOverMaskBlit),
    ADD_FUNC(IntArgbToFourByteAbgrXorBlit),
    ADD_FUNC(IntRgbToFourByteAbgrAlphaMaskBlit),
    ADD_FUNC(IntRgbToFourByteAbgrConvert),
    ADD_FUNC(IntRgbToFourByteAbgrScaleConvert),
    ADD_FUNC(ThreeByteBgrToFourByteAbgrConvert),
    ADD_FUNC(ThreeByteBgrToFourByteAbgrScaleConvert),
    ADD_FUNC(ByteGrayToFourByteAbgrPreConvert),
    ADD_FUNC(ByteGrayToFourByteAbgrPreScaleConvert),
    ADD_FUNC(ByteIndexedBmToFourByteAbgrPreScaleXparOver),
    ADD_FUNC(ByteIndexedBmToFourByteAbgrPreXparBgCopy),
    ADD_FUNC(ByteIndexedBmToFourByteAbgrPreXparOver),
    ADD_FUNC(ByteIndexedToFourByteAbgrPreConvert),
    ADD_FUNC(ByteIndexedToFourByteAbgrPreScaleConvert),
    ADD_FUNC(FourByteAbgrPreAlphaMaskFill),
    ADD_FUNC(FourByteAbgrPreDrawGlyphListAA),
    ADD_FUNC(FourByteAbgrPreSrcMaskFill),
    ADD_FUNC(FourByteAbgrPreSrcOverMaskFill),
    ADD_FUNC(FourByteAbgrPreToIntArgbConvert),
    ADD_FUNC(FourByteAbgrPreToIntArgbScaleConvert),
    ADD_FUNC(IntArgbBmToFourByteAbgrPreScaleXparOver),
    ADD_FUNC(IntArgbToFourByteAbgrPreAlphaMaskBlit),
    ADD_FUNC(IntArgbToFourByteAbgrPreConvert),
    ADD_FUNC(IntArgbToFourByteAbgrPreScaleConvert),
    ADD_FUNC(IntArgbToFourByteAbgrPreSrcOverMaskBlit),
    ADD_FUNC(IntArgbToFourByteAbgrPreXorBlit),
    ADD_FUNC(IntRgbToFourByteAbgrPreAlphaMaskBlit),
    ADD_FUNC(IntRgbToFourByteAbgrPreConvert),
    ADD_FUNC(IntRgbToFourByteAbgrPreScaleConvert),
    ADD_FUNC(ThreeByteBgrToFourByteAbgrPreConvert),
    ADD_FUNC(ThreeByteBgrToFourByteAbgrPreScaleConvert),
    ADD_FUNC(ByteIndexedBmToIntArgbScaleXparOver),
    ADD_FUNC(ByteIndexedBmToIntArgbXparBgCopy),
    ADD_FUNC(ByteIndexedBmToIntArgbXparOver),
    ADD_FUNC(ByteIndexedToIntArgbConvert),
    ADD_FUNC(ByteIndexedToIntArgbScaleConvert),
    ADD_FUNC(Index12GrayToIntArgbConvert),
    ADD_FUNC(IntArgbAlphaMaskFill),
    ADD_FUNC(IntArgbBmToIntArgbScaleXparOver),
    ADD_FUNC(IntArgbDrawGlyphListAA),
    ADD_FUNC(IntArgbSrcMaskFill),
    ADD_FUNC(IntArgbSrcOverMaskFill),
    ADD_FUNC(IntArgbToIntArgbAlphaMaskBlit),
    ADD_FUNC(IntArgbToIntArgbSrcOverMaskBlit),
    ADD_FUNC(IntArgbToIntArgbXorBlit),
    ADD_FUNC(IntRgbToIntArgbAlphaMaskBlit),
    ADD_FUNC(ByteIndexedBmToIntArgbBmScaleXparOver),
    ADD_FUNC(ByteIndexedBmToIntArgbBmXparBgCopy),
    ADD_FUNC(ByteIndexedBmToIntArgbBmXparOver),
    ADD_FUNC(ByteIndexedToIntArgbBmConvert),
    ADD_FUNC(ByteIndexedToIntArgbBmScaleConvert),
    ADD_FUNC(IntArgbBmDrawGlyphListAA),
    ADD_FUNC(IntArgbBmToIntArgbConvert),
    ADD_FUNC(IntArgbToIntArgbBmConvert),
    ADD_FUNC(IntArgbToIntArgbBmScaleConvert),
    ADD_FUNC(IntArgbToIntArgbBmXorBlit),
    ADD_FUNC(ByteGrayToIntArgbPreConvert),
    ADD_FUNC(ByteGrayToIntArgbPreScaleConvert),
    ADD_FUNC(ByteIndexedBmToIntArgbPreScaleXparOver),
    ADD_FUNC(ByteIndexedBmToIntArgbPreXparBgCopy),
    ADD_FUNC(ByteIndexedBmToIntArgbPreXparOver),
    ADD_FUNC(ByteIndexedToIntArgbPreConvert),
    ADD_FUNC(ByteIndexedToIntArgbPreScaleConvert),
    ADD_FUNC(IntArgbPreAlphaMaskFill),
    ADD_FUNC(IntArgbPreDrawGlyphListAA),
    ADD_FUNC(IntArgbPreSrcMaskFill),
    ADD_FUNC(IntArgbPreSrcOverMaskFill),
    ADD_FUNC(IntArgbPreToIntArgbConvert),
    ADD_FUNC(IntArgbPreToIntArgbScaleConvert),
    ADD_FUNC(IntArgbToIntArgbPreAlphaMaskBlit),
    ADD_FUNC(IntArgbToIntArgbPreConvert),
    ADD_FUNC(IntArgbToIntArgbPreScaleConvert),
    ADD_FUNC(IntArgbToIntArgbPreSrcOverMaskBlit),
    ADD_FUNC(IntArgbToIntArgbPreXorBlit),
    ADD_FUNC(IntRgbToIntArgbPreAlphaMaskBlit),
    ADD_FUNC(IntRgbToIntArgbPreConvert),
    ADD_FUNC(IntRgbToIntArgbPreScaleConvert),
    ADD_FUNC(ThreeByteBgrToIntArgbPreConvert),
    ADD_FUNC(ThreeByteBgrToIntArgbPreScaleConvert),
    ADD_FUNC(ByteIndexedBmToIntBgrScaleXparOver),
    ADD_FUNC(ByteIndexedBmToIntBgrXparBgCopy),
    ADD_FUNC(ByteIndexedBmToIntBgrXparOver),
    ADD_FUNC(ByteIndexedToIntBgrConvert),
    ADD_FUNC(ByteIndexedToIntBgrScaleConvert),
    ADD_FUNC(IntArgbBmToIntBgrScaleXparOver),
    ADD_FUNC(IntArgbBmToIntBgrXparBgCopy),
    ADD_FUNC(IntArgbBmToIntBgrXparOver),
    ADD_FUNC(IntArgbToIntBgrAlphaMaskBlit),
    ADD_FUNC(IntArgbToIntBgrConvert),
    ADD_FUNC(IntArgbToIntBgrScaleConvert),
    ADD_FUNC(IntArgbToIntBgrSrcOverMaskBlit),
    ADD_FUNC(IntArgbToIntBgrXorBlit),
    ADD_FUNC(IntBgrAlphaMaskFill),
    ADD_FUNC(IntBgrDrawGlyphListAA),
    ADD_FUNC(IntBgrSrcMaskFill),
    ADD_FUNC(IntBgrSrcOverMaskFill),
    ADD_FUNC(IntBgrToIntArgbConvert),
    ADD_FUNC(IntBgrToIntArgbScaleConvert),
    ADD_FUNC(IntBgrToIntBgrAlphaMaskBlit),
    ADD_FUNC(IntRgbToIntBgrAlphaMaskBlit),
    ADD_FUNC(ThreeByteBgrToIntBgrConvert),
    ADD_FUNC(ThreeByteBgrToIntBgrScaleConvert),
    ADD_FUNC(ByteGrayToIntRgbConvert),
    ADD_FUNC(ByteGrayToIntRgbScaleConvert),
    ADD_FUNC(IntArgbBmToIntRgbXparBgCopy),
    ADD_FUNC(IntArgbBmToIntRgbXparOver),
    ADD_FUNC(IntArgbToIntRgbAlphaMaskBlit),
    ADD_FUNC(IntArgbToIntRgbSrcOverMaskBlit),
    ADD_FUNC(IntArgbToIntRgbXorBlit),
    ADD_FUNC(IntRgbAlphaMaskFill),
    ADD_FUNC(IntRgbDrawGlyphListAA),
    ADD_FUNC(IntRgbSrcMaskFill),
    ADD_FUNC(IntRgbSrcOverMaskFill),
    ADD_FUNC(IntRgbToIntArgbConvert),
    ADD_FUNC(IntRgbToIntArgbScaleConvert),
    ADD_FUNC(IntRgbToIntRgbAlphaMaskBlit),
    ADD_FUNC(ThreeByteBgrToIntRgbConvert),
    ADD_FUNC(ThreeByteBgrToIntRgbScaleConvert),
    ADD_FUNC(ByteGrayToIntRgbxConvert),
    ADD_FUNC(ByteGrayToIntRgbxScaleConvert),
    ADD_FUNC(ByteIndexedBmToIntRgbxScaleXparOver),
    ADD_FUNC(ByteIndexedBmToIntRgbxXparBgCopy),
    ADD_FUNC(ByteIndexedBmToIntRgbxXparOver),
    ADD_FUNC(ByteIndexedToIntRgbxConvert),
    ADD_FUNC(ByteIndexedToIntRgbxScaleConvert),
    ADD_FUNC(IntArgbBmToIntRgbxScaleXparOver),
    ADD_FUNC(IntArgbToIntRgbxConvert),
    ADD_FUNC(IntArgbToIntRgbxScaleConvert),
    ADD_FUNC(IntArgbToIntRgbxXorBlit),
    ADD_FUNC(IntRgbxDrawGlyphListAA),
    ADD_FUNC(IntRgbxToIntArgbConvert),
    ADD_FUNC(IntRgbxToIntArgbScaleConvert),
    ADD_FUNC(ThreeByteBgrToIntRgbxConvert),
    ADD_FUNC(ThreeByteBgrToIntRgbxScaleConvert),
    ADD_FUNC(ThreeByteBgrAlphaMaskFill),
    ADD_FUNC(ThreeByteBgrSrcMaskFill),
    ADD_FUNC(ThreeByteBgrSrcOverMaskFill),
    ADD_FUNC(ThreeByteBgrToIntArgbConvert),
    ADD_FUNC(ThreeByteBgrToIntArgbScaleConvert),
};

/***************************************************************/

#define NUM_VIS_FUNCS sizeof(vis_func_pair_array)/sizeof(AnyFunc_pair)

/***************************************************************/

#define HASH_SIZE     1024 /* must be power of 2 and > number of functions */
#define PTR_SHIFT     ((sizeof(void*) == 4) ? 2 : 3)
#define HASH_FUNC(x)  (((jint)(x) >> PTR_SHIFT) & (HASH_SIZE - 1))
#define NEXT_INDEX(j) ((j + 1) & (HASH_SIZE - 1))

static AnyFunc* hash_table[HASH_SIZE];
static AnyFunc* hash_table_vis[HASH_SIZE];

/***************************************************************/

static int initialized;
static int usevis = JNI_TRUE;

#ifdef __linux__
#   define ULTRA_CHIP   "sparc64"
#else
#   define ULTRA_CHIP   "sun4u"
#endif

extern TransformInterpFunc *pBilinearFunc;
extern TransformInterpFunc *pBicubicFunc;
extern TransformInterpFunc vis_BilinearBlend;
extern TransformInterpFunc vis_BicubicBlend;

/*
 * This function returns a pointer to the VIS accelerated version
 * of the indicated C function if it exists and if the conditions
 * are correct to use the VIS functions.
 */
AnyFunc* MapAccelFunction(AnyFunc *func_c)
{
    jint i, j;

    if (!initialized) {
        struct utsname name;

        /*
         * Only use the vis loops if the environment variable is set.
         * Find out the machine name. If it is an SUN ultra, we
         * can use the vis library
         */
        if (uname(&name) < 0 || strcmp(name.machine, ULTRA_CHIP) != 0) {
            usevis = JNI_FALSE;
        } else {
            char *vis_env = getenv("J2D_USE_VIS_LOOPS");
            if (vis_env != 0) {
                switch (*vis_env) {
                case 'T':
                    fprintf(stderr, "VIS loops enabled\n");
                case 't':
                    usevis = JNI_TRUE;
                    break;

                case 'F':
                    fprintf(stderr, "VIS loops disabled\n");
                case 'f':
                    usevis = JNI_FALSE;
                    break;

                default:
                    fprintf(stderr, "VIS loops %s by default\n",
                            usevis ? "enabled" : "disabled");
                    break;
                }
            }
        }
        initialized = 1;
        if (usevis) {
            /* fill hash table */
            memset(hash_table, 0, sizeof(hash_table));
            for (i = 0; i < NUM_VIS_FUNCS; i++) {
                AnyFunc* func = vis_func_pair_array[i].func_c;
                j = HASH_FUNC(func);
                while (hash_table[j] != NULL) {
                    j = NEXT_INDEX(j);
                }
                hash_table[j] = func;
                hash_table_vis[j] = vis_func_pair_array[i].func_vis;
            }
            pBilinearFunc = vis_BilinearBlend;
            pBicubicFunc = vis_BicubicBlend;
        }
    }
    if (!usevis) {
        return func_c;
    }

    j = HASH_FUNC(func_c);
    while (hash_table[j] != NULL) {
        if (hash_table[j] == func_c) {
            return hash_table_vis[j];
        }
        j = NEXT_INDEX(j);
    }

    return func_c;
}

/***************************************************************/
