/*
* Copyright 2022 Google LLC
*
* Use of this source code is governed by a BSD - style license that can be
* found in the LICENSE file .
*/
#ifndef SkFeatures_DEFINED
#define SkFeatures_DEFINED
#if !defined (SK_BUILD_FOR_ANDROID) && !defined (SK_BUILD_FOR_IOS) && !defined (SK_BUILD_FOR_WIN) && \
!defined (SK_BUILD_FOR_UNIX) && !defined (SK_BUILD_FOR_MAC)
#ifdef __APPLE__
#include <TargetConditionals.h>
#endif
#if defined (_WIN32) || defined (__SYMBIAN32__)
#define SK_BUILD_FOR_WIN
#elif defined (ANDROID) || defined (__ANDROID__)
#define SK_BUILD_FOR_ANDROID
#elif defined (__EMSCRIPTEN__)
// WASM toolchains expose a Unix-like compilation environment, but it is
// not Unix (e.g. posix signals are not supported).
#define SK_BUILD_FOR_WASM
#elif defined (linux) || defined (__linux) || defined (__FreeBSD__) || \
defined (__OpenBSD__) || defined (__sun) || defined (__NetBSD__) || \
defined (__DragonFly__) || defined (__Fuchsia__) || \
defined (__GLIBC__) || defined (__GNU__) || defined (__unix__)
#define SK_BUILD_FOR_UNIX
#elif TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
#define SK_BUILD_FOR_IOS
#else
#define SK_BUILD_FOR_MAC
#endif
#endif // end SK_BUILD_FOR_*
#if defined (SK_BUILD_FOR_WIN) && !defined (__clang__)
#if !defined (SK_RESTRICT)
#define SK_RESTRICT __restrict
#endif
#endif
#if !defined (SK_RESTRICT)
#define SK_RESTRICT __restrict__
#endif
#if !defined (SK_CPU_BENDIAN) && !defined (SK_CPU_LENDIAN)
#if defined (__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
#define SK_CPU_BENDIAN
#elif defined (__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
#define SK_CPU_LENDIAN
#elif defined (__sparc) || defined (__sparc__) || \
defined (_POWER) || defined (__powerpc__) || \
defined (__ppc__) || defined (__hppa) || \
defined (__PPC__) || defined (__PPC64__) || \
defined (_MIPSEB) || defined (__ARMEB__) || \
defined (__s390__) || \
(defined (__sh__) && defined (__BIG_ENDIAN__)) || \
(defined (__ia64) && defined (__BIG_ENDIAN__))
#define SK_CPU_BENDIAN
#else
#define SK_CPU_LENDIAN
#endif
#endif
#if defined (__i386) || defined (_M_IX86) || defined (__x86_64__) || defined (_M_X64)
#define SK_CPU_X86 1
#endif
#if defined (__loongarch__) || defined (__loongarch64)
#define SK_CPU_LOONGARCH 1
#endif
#if defined (__powerpc__) || defined (__powerpc64__)
#define SK_CPU_PPC 1
#endif
/**
* SK_CPU_X64_LEVEL
*
* If defined , SK_CPU_X64_LEVEL should be set to the highest supported level .
* On non - Intel , non - AMD CPUs this should be undefined .
*/
#define SK_CPU_X64_LEVEL_SSE1 10
#define SK_CPU_X64_LEVEL_SSE2 20
#define SK_CPU_X64_LEVEL_SSE3 30
#define SK_CPU_X64_LEVEL_SSSE3 31
#define SK_CPU_X64_LEVEL_SSE41 41
#define SK_CPU_X64_LEVEL_SSE42 42
#define SK_CPU_X64_LEVEL_AVX 51
#define SK_CPU_X64_LEVEL_AVX2 52
#define SK_CPU_X64_LEVEL_ML4 60
/**
* SK_CPU_LSX_LEVEL
*
* If defined , SK_CPU_LSX_LEVEL should be set to the highest supported level .
* On non - loongarch CPU this should be undefined .
*/
#define SK_CPU_LSX_LEVEL_LSX 10
#define SK_CPU_LSX_LEVEL_LASX 20
// TODO(kjlubick) clean up these checks
// Are we in GCC/Clang?
#ifndef SK_CPU_X64_LEVEL
// These checks must be done in descending order to ensure we set the highest
// available SSE level.
#if defined (__AVX512F__) && defined (__AVX512DQ__) && defined (__AVX512CD__) && \
defined (__AVX512BW__) && defined (__AVX512VL__)
#define SK_CPU_X64_LEVEL SK_CPU_X64_LEVEL_ML4
#elif defined (__AVX2__)
#define SK_CPU_X64_LEVEL SK_CPU_X64_LEVEL_AVX2
#elif defined (__AVX__)
#define SK_CPU_X64_LEVEL SK_CPU_X64_LEVEL_AVX
#elif defined (__SSE4_2__)
#define SK_CPU_X64_LEVEL SK_CPU_X64_LEVEL_SSE42
#elif defined (__SSE4_1__)
#define SK_CPU_X64_LEVEL SK_CPU_X64_LEVEL_SSE41
#elif defined (__SSSE3__)
#define SK_CPU_X64_LEVEL SK_CPU_X64_LEVEL_SSSE3
#elif defined (__SSE3__)
#define SK_CPU_X64_LEVEL SK_CPU_X64_LEVEL_SSE3
#elif defined (__SSE2__)
#define SK_CPU_X64_LEVEL SK_CPU_X64_LEVEL_SSE2
#endif
#endif
#ifndef SK_CPU_LSX_LEVEL
#if defined (__loongarch_asx)
#define SK_CPU_LSX_LEVEL SK_CPU_LSX_LEVEL_LASX
#elif defined (__loongarch_sx)
#define SK_CPU_LSX_LEVEL SK_CPU_LSX_LEVEL_LSX
#endif
#endif
// Are we in VisualStudio?
#ifndef SK_CPU_X64_LEVEL
// These checks must be done in descending order to ensure we set the highest
// available SSE level. 64-bit intel guarantees at least SSE2 support.
#if defined (__AVX512F__) && defined (__AVX512DQ__) && defined (__AVX512CD__) && \
defined (__AVX512BW__) && defined (__AVX512VL__)
#define SK_CPU_X64_LEVEL SK_CPU_X64_LEVEL_ML4
#elif defined (__AVX2__)
#define SK_CPU_X64_LEVEL SK_CPU_X64_LEVEL_AVX2
#elif defined (__AVX__)
#define SK_CPU_X64_LEVEL SK_CPU_X64_LEVEL_AVX
#elif defined (_M_X64) || defined (_M_AMD64)
#define SK_CPU_X64_LEVEL SK_CPU_X64_LEVEL_SSE2
#elif defined (_M_IX86_FP)
#if _M_IX86_FP >= 2
#define SK_CPU_X64_LEVEL SK_CPU_X64_LEVEL_SSE2
#elif _M_IX86_FP == 1
#define SK_CPU_X64_LEVEL SK_CPU_X64_LEVEL_SSE1
#endif
#endif
#endif
// ARM defines
#if defined (__arm__) && (!defined (__APPLE__) || !TARGET_IPHONE_SIMULATOR)
#define SK_CPU_ARM32
#elif defined (__aarch64__)
#define SK_CPU_ARM64
#endif
// All 64-bit ARM chips have NEON. Many 32-bit ARM chips do too.
#if !defined (SK_ARM_HAS_NEON) && defined (__ARM_NEON)
#define SK_ARM_HAS_NEON
#endif
#endif // SkFeatures_DEFINED
Messung V0.5 in Prozent C=91 H=100 G=95
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-09-30)
¤
*© Formatika GbR, Deutschland