/* this INTERNAL function was added to libpng 1.2.0 */ void /* PRIVATE */ png_init_mmx_flags (png_structp png_ptr) { png_ptr->mmx_rowbytes_threshold = 0; png_ptr->mmx_bitdepth_threshold = 0; # if (defined(PNG_USE_PNGVCRD) || defined(PNG_USE_PNGGCCRD)) png_ptr->asm_flags |= PNG_ASM_FLAG_MMX_SUPPORT_COMPILED; if (png_mmx_support() > 0) { png_ptr->asm_flags |= PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU # ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW | PNG_ASM_FLAG_MMX_READ_COMBINE_ROW # endif # ifdef PNG_HAVE_ASSEMBLER_READ_INTERLACE | PNG_ASM_FLAG_MMX_READ_INTERLACE # endif # ifndef PNG_HAVE_ASSEMBLER_READ_FILTER_ROW ; # else | PNG_ASM_FLAG_MMX_READ_FILTER_SUB | PNG_ASM_FLAG_MMX_READ_FILTER_UP | PNG_ASM_FLAG_MMX_READ_FILTER_AVG | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ; png_ptr->mmx_rowbytes_threshold = PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT; png_ptr->mmx_bitdepth_threshold = PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT; # endif } else { png_ptr->asm_flags &= ~( PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU | PNG_MMX_READ_FLAGS | PNG_MMX_WRITE_FLAGS ); } # else /* !((PNGVCRD || PNGGCCRD) && PNG_ASSEMBLER_CODE_SUPPORTED)) */ /* clear all MMX flags; no support is compiled in */ png_ptr->asm_flags &= ~( PNG_MMX_FLAGS ); # endif /* ?(PNGVCRD || PNGGCCRD) */ }
void readpng2_version_info(void) { #if defined(PNG_ASSEMBLER_CODE_SUPPORTED) && \ (defined(__i386__) || defined(_M_IX86) || defined(__x86_64__)) && \ defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200) /* * WARNING: This preprocessor approach means that the following code * cannot be used with a libpng DLL older than 1.2.0--the * compiled-in symbols for the new functions will not exist. * (Could use dlopen() and dlsym() on Unix and corresponding * calls for Windows, but not portable...) */ { int mmxsupport = png_mmx_support(); if (mmxsupport < 0) fprintf(stderr, " Compiled with libpng %s; using libpng %s " "without MMX support.\n", PNG_LIBPNG_VER_STRING, png_libpng_ver); else { int compilerID; png_uint_32 mmx_mask = png_get_mmx_flagmask( PNG_SELECT_READ | PNG_SELECT_WRITE, &compilerID); fprintf(stderr, " Compiled with libpng %s; using libpng %s " "with MMX support\n (%s version).", PNG_LIBPNG_VER_STRING, png_libpng_ver, compilerID == 1? "MSVC++" : (compilerID == 2? "GNU C" : "unknown")); fprintf(stderr, " Processor (x86%s) %s MMX instructions.\n", #if defined(__x86_64__) "_64", #else "", #endif mmxsupport? "supports" : "does not support"); if (mmxsupport > 0) { int num_optims = 0; fprintf(stderr, " Potential MMX optimizations supported by libpng:\n"); if (mmx_mask & PNG_ASM_FLAG_MMX_READ_FILTER_SUB) ++num_optims; if (mmx_mask & PNG_ASM_FLAG_MMX_READ_FILTER_UP) ++num_optims; if (mmx_mask & PNG_ASM_FLAG_MMX_READ_FILTER_AVG) ++num_optims; if (mmx_mask & PNG_ASM_FLAG_MMX_READ_FILTER_PAETH) ++num_optims; if (num_optims) fprintf(stderr, " decoding %s row filters (reading)\n", (num_optims == 4)? "all non-trivial" : "some"); if (mmx_mask & PNG_ASM_FLAG_MMX_READ_COMBINE_ROW) { fprintf(stderr, " combining rows (reading)\n"); ++num_optims; } if (mmx_mask & PNG_ASM_FLAG_MMX_READ_INTERLACE) { fprintf(stderr, " expanding interlacing (reading)\n"); ++num_optims; } mmx_mask &= ~( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \ | PNG_ASM_FLAG_MMX_READ_INTERLACE \ | PNG_ASM_FLAG_MMX_READ_FILTER_SUB \ | PNG_ASM_FLAG_MMX_READ_FILTER_UP \ | PNG_ASM_FLAG_MMX_READ_FILTER_AVG \ | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ); if (mmx_mask) { fprintf(stderr, " other (unknown)\n"); ++num_optims; } if (num_optims == 0) fprintf(stderr, " (none)\n"); } } } #else fprintf(stderr, " Compiled with libpng %s; using libpng %s " "without MMX support.\n", PNG_LIBPNG_VER_STRING, png_libpng_ver); #endif fprintf(stderr, " Compiled with zlib %s; using zlib %s.\n", ZLIB_VERSION, zlib_version); }