1 /* 2 * Copyright 2023 Google LLC 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "include/private/base/SkFeatures.h" 9 #include "src/core/SkCpu.h" 10 #include "src/core/SkMemset.h" 11 12 #define SK_OPTS_TARGET SK_OPTS_TARGET_DEFAULT 13 #include "src/opts/SkOpts_SetTarget.h" 14 15 #include "src/opts/SkMemset_opts.h" // IWYU pragma: keep 16 17 #include "src/opts/SkOpts_RestoreTarget.h" 18 19 namespace SkOpts { 20 DEFINE_DEFAULT(memset16); 21 DEFINE_DEFAULT(memset32); 22 DEFINE_DEFAULT(memset64); 23 24 DEFINE_DEFAULT(rect_memset16); 25 DEFINE_DEFAULT(rect_memset32); 26 DEFINE_DEFAULT(rect_memset64); 27 28 void Init_Memset_avx(); 29 void Init_Memset_erms(); 30 init()31 static bool init() { 32 #if defined(SK_ENABLE_OPTIMIZE_SIZE) 33 // All Init_foo functions are omitted when optimizing for size 34 #elif defined(SK_CPU_X86) 35 #if SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_AVX 36 if (SkCpu::Supports(SkCpu::AVX)) { Init_Memset_avx(); } 37 #endif 38 39 if (SkCpu::Supports(SkCpu::ERMS)) { Init_Memset_erms(); } 40 #endif 41 return true; 42 } 43 Init_Memset()44 void Init_Memset() { 45 [[maybe_unused]] static bool gInitialized = init(); 46 } 47 } // namespace SkOpts 48