godot/thirdparty/embree/kernels/common/isa.h

// Copyright 2009-2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include "../../common/sys/platform.h"
#include "../../common/sys/sysinfo.h"

namespace embree
{
#define DEFINE_SYMBOL2(type,name)
  
#define DECLARE_SYMBOL2(type,name)

#define DECLARE_ISA_FUNCTION(type,symbol,args)                                       \
  
#define DEFINE_ISA_FUNCTION(type,symbol,args)
  
#define ZERO_SYMBOL(features,intersector)

#define INIT_SYMBOL(features,intersector)

#define SELECT_SYMBOL_DEFAULT(features,intersector)

#if defined(__SSE__) || defined(__ARM_NEON)
#if !defined(EMBREE_TARGET_SIMD4)
#define EMBREE_TARGET_SIMD4
#endif
#endif

#if defined(EMBREE_TARGET_SSE42)
#define SELECT_SYMBOL_SSE42
#else
#define SELECT_SYMBOL_SSE42(features,intersector)
#endif

#if defined(EMBREE_TARGET_AVX) || defined(__AVX__)
#if !defined(EMBREE_TARGET_SIMD8)
#define EMBREE_TARGET_SIMD8
#endif
#if defined(__AVX__) // if default ISA is >= AVX we treat AVX target as default target
#define SELECT_SYMBOL_AVX
#else
#define SELECT_SYMBOL_AVX
#endif
#else
#define SELECT_SYMBOL_AVX(features,intersector)
#endif

#if defined(EMBREE_TARGET_AVX2)
#if !defined(EMBREE_TARGET_SIMD8)
#define EMBREE_TARGET_SIMD8
#endif
#define SELECT_SYMBOL_AVX2
#else
#define SELECT_SYMBOL_AVX2(features,intersector)
#endif

#if defined(EMBREE_TARGET_AVX512)
#if !defined(EMBREE_TARGET_SIMD16)
#define EMBREE_TARGET_SIMD16
#endif
#define SELECT_SYMBOL_AVX512
#else
#define SELECT_SYMBOL_AVX512(features,intersector)
#endif

#define SELECT_SYMBOL_DEFAULT_SSE42(features,intersector)                                  
  
#define SELECT_SYMBOL_DEFAULT_SSE42_AVX(features,intersector)                        
  
#define SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2(features,intersector)                       

#define SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX512(features,intersector)

#define SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,intersector)

#define SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,intersector)

#define SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,intersector)

#define SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,intersector)
  
#define SELECT_SYMBOL_DEFAULT_AVX(features,intersector)                        
  
#define SELECT_SYMBOL_DEFAULT_AVX_AVX2(features,intersector)                       
  
#define SELECT_SYMBOL_DEFAULT_AVX(features,intersector)
  
#define SELECT_SYMBOL_DEFAULT_AVX_AVX512(features,intersector)

#define SELECT_SYMBOL_DEFAULT_AVX_AVX512(features,intersector)
  
#define SELECT_SYMBOL_INIT_AVX(features,intersector)                                
  
#define SELECT_SYMBOL_INIT_AVX_AVX2(features,intersector)

#define SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,intersector)

#define SELECT_SYMBOL_INIT_SSE42_AVX_AVX2(features,intersector)
  
#define SELECT_SYMBOL_INIT_AVX(features,intersector)

#define SELECT_SYMBOL_INIT_AVX_AVX512(features,intersector)

#define SELECT_SYMBOL_INIT_AVX_AVX2(features,intersector)

#define SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,intersector)

#define SELECT_SYMBOL_INIT_SSE42_AVX_AVX2_AVX512(features,intersector)

#define SELECT_SYMBOL_ZERO_SSE42_AVX_AVX2_AVX512(features,intersector)

#define SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,intersector)
  
#define SELECT_SYMBOL_INIT_AVX512(features,intersector)
  
#define SELECT_SYMBOL_SSE42_AVX_AVX2(features,intersector)

  struct VerifyMultiTargetLinking {};
  namespace sse2   { int getISA(); };
  namespace sse42  { int getISA(); };
  namespace avx    { int getISA(); };
  namespace avx2   { int getISA(); };
  namespace avx512 { int getISA(); };
}