/* insert_string_sse -- insert_string variant using SSE4.2's CRC instructions * * Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h * */ #include "../../zbuild.h" #include #ifdef _MSC_VER # include #endif #include "../../deflate.h" #ifdef X86_SSE42_CRC_INTRIN # ifdef _MSC_VER # define UPDATE_HASH(s, h, val)\ h = _mm_crc32_u32(h, val) # else # define UPDATE_HASH(s, h, val)\ h = __builtin_ia32_crc32si(h, val) # endif #else # ifdef _MSC_VER # define UPDATE_HASH(s, h, val) {\ __asm mov edx, h\ __asm mov eax, val\ __asm crc32 eax, edx\ __asm mov val, eax\ } # else # define UPDATE_HASH(s, h, val) \ __asm__ __volatile__ (\ "crc32 %1,%0\n\t"\ : "+r" (h)\ : "r" (val)\ ); # endif #endif #define INSERT_STRING insert_string_sse4 #define QUICK_INSERT_STRING quick_insert_string_sse4 #ifdef X86_SSE42_CRC_HASH # include "../../insert_string_tpl.h" #endif