1 //===-- cpu_model_common.c - Utilities for cpu model detection ----*- C -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file implements common utilities for runtime cpu model detection. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef COMPILER_RT_LIB_BUILTINS_CPU_MODEL_COMMON_H 14 #define COMPILER_RT_LIB_BUILTINS_CPU_MODEL_COMMON_H 15 16 #define bool int 17 #define true 1 18 #define false 0 19 20 #ifndef __has_attribute 21 #define __has_attribute(attr) 0 22 #endif 23 24 #if __has_attribute(constructor) 25 #if __GNUC__ >= 9 26 // Ordinarily init priorities below 101 are disallowed as they are reserved for 27 // the implementation. However, we are the implementation, so silence the 28 // diagnostic, since it doesn't apply to us. 29 #pragma GCC diagnostic ignored "-Wprio-ctor-dtor" 30 #endif 31 // We're choosing init priority 90 to force our constructors to run before any 32 // constructors in the end user application (starting at priority 101). This 33 // value matches the libgcc choice for the same functions. 34 #define CONSTRUCTOR_ATTRIBUTE __attribute__((constructor(90))) 35 #else 36 // FIXME: For MSVC, we should make a function pointer global in .CRT$X?? so that 37 // this runs during initialization. 38 #define CONSTRUCTOR_ATTRIBUTE 39 #endif 40 41 #endif 42