rework the verifier to prepare for loop cutting
[ajla.git] / asm-x86.inc
blob657bb8f9c2e28e7e8e57ebbde8bc5b8d19b92a67
1 /*
2  * Copyright (C) 2024 Mikulas Patocka
3  *
4  * This file is part of Ajla.
5  *
6  * Ajla is free software: you can redistribute it and/or modify it under the
7  * terms of the GNU General Public License as published by the Free Software
8  * Foundation, either version 3 of the License, or (at your option) any later
9  * version.
10  *
11  * Ajla is distributed in the hope that it will be useful, but WITHOUT ANY
12  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
13  * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along with
16  * Ajla. If not, see <https://www.gnu.org/licenses/>.
17  */
19 #define feature_name            bswap
20 #define static_test_bswap       ((__i486__) || (__i586__) || (__i686__) || (__MMX__) || (__x86_64__))
21 #define dynamic_test            (eflags_bits & (1 << 18U))
22 #include "asm-1.inc"
24 #define feature_name            cmov
25 #define static_test_cmov        ((__i686__) || (__athlon__) || (__SSE__) || (__x86_64__))
26 #define dynamic_test            (cpuid_1[3] & (1U << 15))
27 #include "asm-1.inc"
29 #define feature_name            popcnt
30 #define static_test_popcnt      (__POPCNT__)
31 #define dynamic_test            (cpuid_1[2] & (1U << 23))
32 #include "asm-1.inc"
34 #define feature_name            lzcnt
35 #define static_test_lzcnt       (__LZCNT__)
36 #define dynamic_test            (cpuid_80000001[2] & (1U << 5))
37 #include "asm-1.inc"
39 #define feature_name            sse
40 #define static_test_sse         ((__SSE__) || (__x86_64__))
41 #define dynamic_test            (likely(cpuid_1[3] & (1U << 25)) && likely(test_fxsave()))
42 #include "asm-1.inc"
44 #define feature_name            sse2
45 #define static_test_sse2        ((__SSE2__) || (__x86_64__))
46 #define dynamic_test            (likely(cpu_test_feature(CPU_FEATURE_sse)) && likely(cpuid_1[3] & (1U << 26)))
47 #include "asm-1.inc"
49 #define feature_name            sse3
50 #define static_test_sse3        (__SSE3__)
51 #define dynamic_test            (likely(cpu_test_feature(CPU_FEATURE_sse2)) && likely(cpuid_1[2] & (1U << 0)))
52 #include "asm-1.inc"
54 #define feature_name            sse41
55 #define static_test_sse41       (__SSE4_1__)
56 #define dynamic_test            (likely(cpu_test_feature(CPU_FEATURE_sse2)) && likely(cpuid_1[2] & (1U << 19)))
57 #include "asm-1.inc"
59 #define feature_name            avx
60 #define static_test_avx         (__AVX__)
61 #define dynamic_test            (likely(cpu_test_feature(CPU_FEATURE_sse2)) && likely((cpuid_1[2] & (7U << 26)) == (7U << 26)) && likely(test_xcr0(6)))
62 #include "asm-1.inc"
64 #define feature_name            f16c
65 #define static_test_f16c        (__F16C__)
66 #define dynamic_test            (likely(cpu_test_feature(CPU_FEATURE_avx)) && likely(cpuid_1[2] & (1U << 29)))
67 #include "asm-1.inc"
69 #define feature_name            bmi2
70 #define static_test_bmi2        (__BMI2__)
71 #define dynamic_test            (cpuid_7[1] & (1U << 8))
72 #include "asm-1.inc"
74 #define feature_name            erms
75 #define static_test_erms        0
76 #define dynamic_test            (cpuid_7[1] & (1U << 9))
77 #include "asm-1.inc"
79 #define feature_name            avx512
80 #define static_test_avx512      (__AVX512F__)
81 #define dynamic_test            (likely(cpu_test_feature(CPU_FEATURE_avx)) && likely(cpuid_7[1] & (1U << 16)) && likely(test_xcr0(0xe0)))
82 #include "asm-1.inc"
84 #define feature_name            avx512vl
85 #define static_test_avx512vl    (__AVX512VL__)
86 #define dynamic_test            (likely(cpu_test_feature(CPU_FEATURE_avx512)) && likely(cpuid_7[1] & (1U << 31)))
87 #include "asm-1.inc"
89 #define feature_name            avx10
90 #define static_test_avx10       (__AVX10_1__)
91 #define dynamic_test            (likely(cpu_test_feature(CPU_FEATURE_avx)) && likely(cpuid_7_1[3] & (1U << 21)) && likely(test_xcr0(0xa0)))
92 #include "asm-1.inc"
94 #define feature_name            fp16
95 #define static_test_fp16        (__AVX512FP16__ || static_test_avx10)
96 #define dynamic_test            ((likely(cpu_test_feature(CPU_FEATURE_avx512)) && likely(cpuid_7[3] & (1U << 23))) || likely(cpu_test_feature(CPU_FEATURE_avx10)))
97 #include "asm-1.inc"
99 #define feature_name            apx
100 #if defined(ARCH_X86_64) && !defined(ARCH_X86_WIN_ABI)
101 #define static_test_apx         (__APX_F__)
102 #define dynamic_test            (cpuid_7_1[3] & (1U << 21) && likely(test_xcr0(1U << 19)))
103 #else
104 #define static_test_apx         0
105 #define dynamic_test            false
106 #endif
107 #include "asm-1.inc"