codegen: use the and instruction when doing zero-extend
[ajla.git] / asm-arm.inc
blobc6865b36a1b85baa1ca7f7375bbb3c9725a2762d
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 #ifndef ARCH_ARM64
20 #define feature_name            armv5
21 #define static_test_armv5       (ARM_VERSION >= 5)
22 #define dynamic_test            (arm_arch >= 5)
23 #include "asm-1.inc"
24 #endif
26 #ifndef ARCH_ARM64
27 #define feature_name            armv6
28 #define static_test_armv6       (ARM_VERSION >= 6)
29 #define dynamic_test            (arm_arch >= 6)
30 #include "asm-1.inc"
31 #endif
33 #ifndef ARCH_ARM64
34 #define feature_name            armv6t2
35 #define static_test_armv6t2     (ARM_VERSION >= 7 || (ARM_VERSION >= 6 && (__ARM_ARCH_ISA_THUMB) && __ARM_ARCH_ISA_THUMB >= 2) || (__ARM_ARCH_6T2__))
36 #if static_test_armv6t2
37 #define dynamic_test            (arm_arch >= 6)
38 #else
39 #define dynamic_test            (arm_arch >= 7)
40 #endif
41 #include "asm-1.inc"
42 #endif
44 #ifndef ARCH_ARM64
45 #define feature_name            vfp
46 #define static_test_vfp         (__ARM_PCS_VFP)
47 #define dynamic_test            (elf_hwcap & (1 << 6))
48 #include "asm-1.inc"
49 #endif
51 #ifndef ARCH_ARM64
52 #define feature_name            half
53 #define static_test_half        (__ARM_FP & 2)
54 #if static_test_half
55 #define dynamic_test            (elf_hwcap & ((1 << 13) | (1 << 14) | (1 << 16)))
56 #else
57 #define dynamic_test            (elf_hwcap & (1 << 16))
58 #endif
59 #include "asm-1.inc"
60 #endif
62 #define feature_name            neon
63 #define static_test_neon        (__ARM_NEON)
64 #ifdef ARCH_ARM64
65 #define dynamic_test            (elf_hwcap & (1 << 1))
66 #else
67 #define dynamic_test            (elf_hwcap & (1 << 12))
68 #endif
69 #include "asm-1.inc"
71 #ifndef ARCH_ARM64
72 #define feature_name            idiv
73 #define static_test_idiv        0
74 #define dynamic_test            (elf_hwcap & (1 << 18) && elf_hwcap & (1 << 17))
75 #include "asm-1.inc"
76 #endif