| //===-- cpu_model_common.c - Utilities for cpu model detection ----*- C -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file implements common utilities for runtime cpu model detection. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef COMPILER_RT_LIB_BUILTINS_CPU_MODEL_COMMON_H |
| #define COMPILER_RT_LIB_BUILTINS_CPU_MODEL_COMMON_H |
| |
| #define bool int |
| #define true 1 |
| #define false 0 |
| |
| #ifndef __has_attribute |
| #define __has_attribute(attr) 0 |
| #endif |
| |
| #if __has_attribute(constructor) |
| #if __GNUC__ >= 9 |
| // Ordinarily init priorities below 101 are disallowed as they are reserved for |
| // the implementation. However, we are the implementation, so silence the |
| // diagnostic, since it doesn't apply to us. |
| #pragma GCC diagnostic ignored "-Wprio-ctor-dtor" |
| #endif |
| // We're choosing init priority 90 to force our constructors to run before any |
| // constructors in the end user application (starting at priority 101). This |
| // value matches the libgcc choice for the same functions. |
| #define CONSTRUCTOR_ATTRIBUTE __attribute__((constructor(90))) |
| #else |
| // FIXME: For MSVC, we should make a function pointer global in .CRT$X?? so that |
| // this runs during initialization. |
| #define CONSTRUCTOR_ATTRIBUTE |
| #endif |
| |
| #endif |