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