MCKL
Monte Carlo Kernel Library
include
mckl
internal
compiler
intrin.h
Go to the documentation of this file.
1
//============================================================================
2
// MCKL/include/mckl/internal/compiler/intrin.h
3
//----------------------------------------------------------------------------
4
// MCKL: Monte Carlo Kernel Library
5
//----------------------------------------------------------------------------
6
// Copyright (c) 2013-2018, Yan Zhou
7
// All rights reserved.
8
//
9
// Redistribution and use in source and binary forms, with or without
10
// modification, are permitted provided that the following conditions are met:
11
//
12
// Redistributions of source code must retain the above copyright notice,
13
// this list of conditions and the following disclaimer.
14
//
15
// Redistributions in binary form must reproduce the above copyright notice,
16
// this list of conditions and the following disclaimer in the documentation
17
// and/or other materials provided with the distribution.
18
//
19
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS
20
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
// POSSIBILITY OF SUCH DAMAGE.
30
//============================================================================
31
32
#ifndef MCKL_INTERNAL_COMPILER_INTRIN_H
33
#define MCKL_INTERNAL_COMPILER_INTRIN_H
34
35
#ifndef MCKL_HAS_AVX512
36
#define MCKL_HAS_AVX512 0
37
#endif
38
39
#ifndef MCKL_HAS_AVX2
40
#define MCKL_HAS_AVX2 MCKL_HAS_AVX512
41
#endif
42
43
#ifndef MCKL_HAS_AVX
44
#define MCKL_HAS_AVX MCKL_HAS_AVX2
45
#endif
46
47
#ifndef MCKL_HAS_SSE4_2
48
#define MCKL_HAS_SSE4_2 MCKL_HAS_AVX
49
#endif
50
51
#ifndef MCKL_HAS_SSE4_1
52
#define MCKL_HAS_SSE4_1 MCKL_HAS_SSE4_2
53
#endif
54
55
#ifndef MCKL_HAS_SSSE3
56
#define MCKL_HAS_SSSE3 MCKL_HAS_SSE4_1
57
#endif
58
59
#ifndef MCKL_HAS_SSE3
60
#define MCKL_HAS_SSE3 MCKL_HAS_SSSE3
61
#endif
62
63
#ifndef MCKL_HAS_SSE2
64
#define MCKL_HAS_SSE2 MCKL_HAS_SSE3
65
#endif
66
67
#ifndef MCKL_HAS_AESNI
68
#define MCKL_HAS_AESNI MCKL_HAS_AVX
69
#endif
70
71
#ifndef MCKL_HAS_RDRAND
72
#define MCKL_HAS_RDRAND MCKL_HAS_AVX2
73
#endif
74
75
#ifndef MCKL_HAS_BMI
76
#define MCKL_HAS_BMI MCKL_HAS_AVX2
77
#endif
78
79
#ifndef MCKL_HAS_BMI2
80
#define MCKL_HAS_BMI2 MCKL_HAS_AVX2
81
#endif
82
83
#ifndef MCKL_HAS_FMA
84
#define MCKL_HAS_FMA MCKL_HAS_AVX2
85
#endif
86
87
#ifndef MCKL_HAS_RDPMC
88
#define MCKL_HAS_RDPMC 0
89
#endif
90
91
#ifndef MCKL_HAS_RDTSC
92
#define MCKL_HAS_RDTSC MCKL_HAS_X86
93
#endif
94
95
#ifndef MCKL_HAS_RDTSCP
96
#define MCKL_HAS_RDTSCP MCKL_HAS_SSE4_2
97
#endif
98
99
#ifndef MCKL_USE_SSE2
100
#define MCKL_USE_SSE2 MCKL_HAS_SSE2
101
#endif
102
103
#ifndef MCKL_USE_SSE3
104
#define MCKL_USE_SSE3 MCKL_HAS_SSE3
105
#endif
106
107
#ifndef MCKL_USE_SSSE3
108
#define MCKL_USE_SSSE3 MCKL_HAS_SSSE3
109
#endif
110
111
#ifndef MCKL_USE_SSE4_1
112
#define MCKL_USE_SSE4_1 MCKL_HAS_SSE4_1
113
#endif
114
115
#ifndef MCKL_USE_SSE4_2
116
#define MCKL_USE_SSE4_2 MCKL_HAS_SSE4_2
117
#endif
118
119
#ifndef MCKL_USE_AVX
120
#define MCKL_USE_AVX MCKL_HAS_AVX
121
#endif
122
123
#ifndef MCKL_USE_AVX2
124
#define MCKL_USE_AVX2 MCKL_HAS_AVX2
125
#endif
126
127
#ifndef MCKL_USE_AVX512
128
#define MCKL_USE_AVX512 MCKL_HAS_AVX512
129
#endif
130
131
#ifndef MCKL_HAS_AESNI
132
#define MCKL_HAS_AESNI MCKL_HAS_AVX2
133
#endif
134
135
#ifndef MCKL_USE_AESNI
136
#define MCKL_USE_AESNI MCKL_HAS_AESNI
137
#endif
138
139
#ifndef MCKL_USE_RDRAND
140
#define MCKL_USE_RDRAND MCKL_HAS_RDRAND
141
#endif
142
143
#ifndef MCKL_USE_BMI
144
#define MCKL_USE_BMI MCKL_HAS_BMI
145
#endif
146
147
#ifndef MCKL_USE_BMI2
148
#define MCKL_USE_BMI2 MCKL_HAS_BMI2
149
#endif
150
151
#ifndef MCKL_USE_FMA
152
#define MCKL_USE_FMA MCKL_HAS_FMA
153
#endif
154
155
#ifndef MCKL_USE_RDPMC
156
#define MCKL_USE_RDPMC MCKL_HAS_RDPMC
157
#endif
158
159
#ifndef MCKL_USE_RDTSC
160
#define MCKL_USE_RDTSC MCKL_HAS_RDTSC
161
#endif
162
163
#ifndef MCKL_USE_RDTSCP
164
#define MCKL_USE_RDTSCP MCKL_HAS_RDTSCP
165
#endif
166
167
#ifndef MCKL_INT64
168
#define MCKL_INT64 long long
169
#endif
170
171
#ifndef MCKL_HAS_INT128
172
#define MCKL_HAS_INT128 0
173
#endif
174
175
#endif // MCKL_INTERNAL_COMPILER_INTRIN_H
Generated by
1.8.13