Skip to content

Commit c75baff

Browse files
committed
ARM and AArch64 feature bits
1 parent e85e1da commit c75baff

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed

src/features_aarch64.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// This file is a part of Julia. License is MIT: https://julialang.org/license
2+
3+
// AArch64 features definition
4+
// hwcap
5+
AArch64_FEATURE_DEF(crypto, 3, 0)
6+
AArch64_FEATURE_DEF(crc, 7, 0)
7+
AArch64_FEATURE_DEF(lse, 8, 0)
8+
AArch64_FEATURE_DEF(fullfp16, 9, 0)
9+
AArch64_FEATURE_DEF(rdm, 12, 50000)
10+
AArch64_FEATURE_DEF(jscvt, 13, UINT32_MAX)
11+
AArch64_FEATURE_DEF(fcma, 14, UINT32_MAX)
12+
AArch64_FEATURE_DEF(lrcpc, 15, UINT32_MAX)
13+
// AArch64_FEATURE_DEF(ras, ???, 0)

src/features_arm.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// This file is a part of Julia. License is MIT: https://julialang.org/license
2+
3+
// ARM features definition
4+
// hwcap
5+
ARM_FEATURE_DEF(neon, 12, 0)
6+
ARM_FEATURE_DEF(vfp3, 13, 0)
7+
// ARM_FEATURE_DEF(vfpv3d16, 14, 0) // d16
8+
ARM_FEATURE_DEF(vfp4, 16, 0)
9+
ARM_FEATURE_DEF(hwdiv_arm, 17, 0)
10+
ARM_FEATURE_DEF(hwdiv, 18, 0)
11+
ARM_FEATURE_DEF(d32, 19, 0) // -d16
12+
13+
// hwcap2
14+
ARM_FEATURE_DEF(crypto, 32 + 0, 0)
15+
ARM_FEATURE_DEF(crc, 32 + 4, 0)
16+
// ARM_FEATURE_DEF(ras, 32 + ???, 0)
17+
// ARM_FEATURE_DEF(fullfp16, 32 + ???, 0)
18+
19+
// custom bits to match llvm model
20+
ARM_FEATURE_DEF(v7, 32 * 2 + 0, 0)
21+
ARM_FEATURE_DEF(v7a, 32 * 2 + 1, 0)
22+
ARM_FEATURE_DEF(v7r, 32 * 2 + 2, 0)
23+
// no v7m for now
24+
ARM_FEATURE_DEF(v8, 32 * 2 + 3, 0)
25+
ARM_FEATURE_DEF(v8a, 32 * 2 + 4, 0)
26+
ARM_FEATURE_DEF(v8r, 32 * 2 + 5, 0)
27+
ARM_FEATURE_DEF(v8_1a, 32 * 2 + 6, 0)
28+
ARM_FEATURE_DEF(v8_2a, 32 * 2 + 7, 0)

src/processor.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ typedef enum {
5555
#define X86_FEATURE_DEF(name, bit, llvmver) JL_X86_##name = bit,
5656
#include "features_x86.h"
5757
#undef X86_FEATURE_DEF
58+
#define ARM_FEATURE_DEF(name, bit, llvmver) JL_ARM_##name = bit,
59+
#include "features_arm.h"
60+
#undef ARM_FEATURE_DEF
61+
#define AArch64_FEATURE_DEF(name, bit, llvmver) JL_AArch64_##name = bit,
62+
#include "features_aarch64.h"
63+
#undef AArch64_FEATURE_DEF
5864
} jl_cpu_feature_t;
5965

6066
int jl_test_cpu_feature(jl_cpu_feature_t feature);

0 commit comments

Comments
 (0)