wuffs gen -version=0.3.0-alpha.20
diff --git a/release/c/wuffs-v0.3.c b/release/c/wuffs-v0.3.c index 38592cd..4f034d9 100644 --- a/release/c/wuffs-v0.3.c +++ b/release/c/wuffs-v0.3.c
@@ -65,24 +65,33 @@ // each major.minor branch, the commit count should increase monotonically. // // WUFFS_VERSION was overridden by "wuffs gen -version" based on revision -// 85bdcd1e1e2929f592a9c6542a5a709355b49f34 committed on 2021-03-13. +// 9914f7314deef16817481ceb41f07b04bd79b428 committed on 2021-03-17. #define WUFFS_VERSION 0x000030000 #define WUFFS_VERSION_MAJOR 0 #define WUFFS_VERSION_MINOR 3 #define WUFFS_VERSION_PATCH 0 -#define WUFFS_VERSION_PRE_RELEASE_LABEL "alpha.19" -#define WUFFS_VERSION_BUILD_METADATA_COMMIT_COUNT 2983 -#define WUFFS_VERSION_BUILD_METADATA_COMMIT_DATE 20210313 -#define WUFFS_VERSION_STRING "0.3.0-alpha.19+2983.20210313" +#define WUFFS_VERSION_PRE_RELEASE_LABEL "alpha.20" +#define WUFFS_VERSION_BUILD_METADATA_COMMIT_COUNT 2985 +#define WUFFS_VERSION_BUILD_METADATA_COMMIT_DATE 20210317 +#define WUFFS_VERSION_STRING "0.3.0-alpha.20+2985.20210317" // ---------------- Configuration // Define WUFFS_CONFIG__AVOID_CPU_ARCH to avoid any code tied to a specific CPU // architecture, such as SSE SIMD for the x86 CPU family. -#if defined(WUFFS_CONFIG__AVOID_CPU_ARCH) +#if defined(WUFFS_CONFIG__AVOID_CPU_ARCH) // (#if-chain ref AVOID_CPU_ARCH_0) // No-op. +#else // (#if-chain ref AVOID_CPU_ARCH_0) + +// The "defined(__clang__)" isn't redundant. While vanilla clang defines +// __GNUC__, clang-cl (which mimics MSVC's cl.exe) does not. +#if defined(__GNUC__) || defined(__clang__) +#define WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET(arg) __attribute__((target(arg))) #else -#if defined(__GNUC__) +#define WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET(arg) +#endif // defined(__GNUC__) || defined(__clang__) + +#if defined(__GNUC__) // (#if-chain ref AVOID_CPU_ARCH_1) // To simplify Wuffs code, "cpu_arch >= arm_xxx" requires xxx but also // unaligned little-endian load/stores. @@ -108,15 +117,24 @@ #define WUFFS_BASE__CPU_ARCH__X86_64 #endif // defined(__x86_64__) -#elif defined(_MSC_VER) // defined(__GNUC__) +#elif defined(_MSC_VER) // (#if-chain ref AVOID_CPU_ARCH_1) #if defined(_M_X64) +#if defined(__clang__) +// No-op. clang-cl (which defines both __clang__ and _MSC_VER) supports +// "__attribute__((target(arg)))". +#elif !defined(__AVX__) +// For MSVC's cl.exe (unlike clang or gcc), SIMD capability is a compile-time +// property of the source file (e.g. a /arch:AVX or -mavx compiler flag), not +// of individual functions (that can be conditionally selected at runtime). +#error "Wuffs with MSVC+X64 needs /arch:AVX or /DWUFFS_CONFIG__AVOID_CPU_ARCH" +#endif // defined(__clang__); !defined(__AVX__) #include <intrin.h> #define WUFFS_BASE__CPU_ARCH__X86_64 -#endif // defined(__x86_64__) +#endif // defined(_M_X64) -#endif // defined(__GNUC__); defined(_MSC_VER) -#endif // defined(WUFFS_CONFIG__AVOID_CPU_ARCH) +#endif // (#if-chain ref AVOID_CPU_ARCH_1) +#endif // (#if-chain ref AVOID_CPU_ARCH_0) // -------- @@ -158,6 +176,8 @@ // - bit_POPCNT = (1 << 23) // - bit_SSE4_2 = (1 << 20) const unsigned int sse42_ecx1 = 0x00900002; + + // clang defines __GNUC__ and clang-cl defines _MSC_VER (but not __GNUC__). #if defined(__GNUC__) unsigned int eax1 = 0; unsigned int ebx1 = 0; @@ -15464,9 +15484,7 @@ } #if defined(WUFFS_BASE__CPU_ARCH__X86_64) -#if defined(__GNUC__) -__attribute__((target("sse4.2"))) -#endif +WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET("sse4.2") static uint64_t // wuffs_base__pixel_swizzler__swap_rgbx_bgrx__sse42(uint8_t* dst_ptr, size_t dst_len, @@ -16809,9 +16827,7 @@ } #if defined(WUFFS_BASE__CPU_ARCH__X86_64) -#if defined(__GNUC__) -__attribute__((target("sse4.2"))) -#endif +WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET("sse4.2") static uint64_t // wuffs_base__pixel_swizzler__bgrw__rgb__sse42(uint8_t* dst_ptr, size_t dst_len, @@ -17252,9 +17268,7 @@ } #if defined(WUFFS_BASE__CPU_ARCH__X86_64) -#if defined(__GNUC__) -__attribute__((target("sse4.2"))) -#endif +WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET("sse4.2") static uint64_t // wuffs_base__pixel_swizzler__xxxx__y__sse42(uint8_t* dst_ptr, size_t dst_len, @@ -18701,9 +18715,7 @@ // -------- func adler32.hasher.up_x86_sse42 #if defined(WUFFS_BASE__CPU_ARCH__X86_64) -#if defined(__GNUC__) -__attribute__((target("pclmul,popcnt,sse4.2"))) -#endif +WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET("pclmul,popcnt,sse4.2") static wuffs_base__empty_struct wuffs_adler32__hasher__up_x86_sse42( wuffs_adler32__hasher* self, @@ -22882,9 +22894,7 @@ // -------- func crc32.ieee_hasher.up_x86_sse42 #if defined(WUFFS_BASE__CPU_ARCH__X86_64) -#if defined(__GNUC__) -__attribute__((target("pclmul,popcnt,sse4.2"))) -#endif +WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET("pclmul,popcnt,sse4.2") static wuffs_base__empty_struct wuffs_crc32__ieee_hasher__up_x86_sse42( wuffs_crc32__ieee_hasher* self, @@ -33534,9 +33544,7 @@ // -------- func png.decoder.filter_1_distance_4_x86_sse42 #if defined(WUFFS_BASE__CPU_ARCH__X86_64) -#if defined(__GNUC__) -__attribute__((target("pclmul,popcnt,sse4.2"))) -#endif +WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET("pclmul,popcnt,sse4.2") static wuffs_base__empty_struct wuffs_png__decoder__filter_1_distance_4_x86_sse42( wuffs_png__decoder* self, @@ -33580,9 +33588,7 @@ // -------- func png.decoder.filter_3_distance_4_x86_sse42 #if defined(WUFFS_BASE__CPU_ARCH__X86_64) -#if defined(__GNUC__) -__attribute__((target("pclmul,popcnt,sse4.2"))) -#endif +WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET("pclmul,popcnt,sse4.2") static wuffs_base__empty_struct wuffs_png__decoder__filter_3_distance_4_x86_sse42( wuffs_png__decoder* self, @@ -33685,9 +33691,7 @@ // -------- func png.decoder.filter_4_distance_3_x86_sse42 #if defined(WUFFS_BASE__CPU_ARCH__X86_64) -#if defined(__GNUC__) -__attribute__((target("pclmul,popcnt,sse4.2"))) -#endif +WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET("pclmul,popcnt,sse4.2") static wuffs_base__empty_struct wuffs_png__decoder__filter_4_distance_3_x86_sse42( wuffs_png__decoder* self, @@ -33811,9 +33815,7 @@ // -------- func png.decoder.filter_4_distance_4_x86_sse42 #if defined(WUFFS_BASE__CPU_ARCH__X86_64) -#if defined(__GNUC__) -__attribute__((target("pclmul,popcnt,sse4.2"))) -#endif +WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET("pclmul,popcnt,sse4.2") static wuffs_base__empty_struct wuffs_png__decoder__filter_4_distance_4_x86_sse42( wuffs_png__decoder* self,