File tree Expand file tree Collapse file tree 4 files changed +31
-2
lines changed Expand file tree Collapse file tree 4 files changed +31
-2
lines changed Original file line number Diff line number Diff line change @@ -94,14 +94,14 @@ jobs:
9494 env :
9595 ANDROID_NDK : ${{ steps.setup-ndk.outputs.ndk-path }}
9696 cmake-linux-qemu :
97- runs-on : ubuntu-22 .04
97+ runs-on : ubuntu-24 .04
9898 timeout-minutes : 40
9999 strategy :
100100 matrix :
101101 build_props :
102102 - [
103103 " cmake-linux-riscv64" ,
104- " riscv64/ubuntu:22 .04"
104+ " riscv64/ubuntu:24 .04"
105105 ]
106106
107107 name : ${{ matrix.build_props[0] }}
Original file line number Diff line number Diff line change @@ -1700,6 +1700,7 @@ struct cpuinfo_arm_isa {
17001700 bool sme_b16b16 ;
17011701 bool sme_f16f16 ;
17021702 uint32_t svelen ;
1703+ uint32_t smelen ;
17031704#endif
17041705 bool rdm ;
17051706 bool fp16arith ;
@@ -2081,6 +2082,15 @@ static inline uint32_t cpuinfo_get_max_arm_sve_length(void) {
20812082#endif
20822083}
20832084
2085+ // Function to get the max SME vector length on ARM CPU's which support SME.
2086+ static inline uint32_t cpuinfo_get_max_arm_sme_length (void ) {
2087+ #if CPUINFO_ARCH_ARM64
2088+ return cpuinfo_isa .smelen * 8 ; // bytes * 8 = bit length(vector length)
2089+ #else
2090+ return 0 ;
2091+ #endif
2092+ }
2093+
20842094static inline bool cpuinfo_has_arm_sme (void ) {
20852095#if CPUINFO_ARCH_ARM64
20862096 return cpuinfo_isa .sme ;
Original file line number Diff line number Diff line change @@ -191,4 +191,22 @@ void cpuinfo_arm64_linux_decode_isa_from_proc_cpuinfo(
191191 // Mask out the SVE vector length bits
192192 isa -> svelen = ret & PR_SVE_VL_LEN_MASK ;
193193 }
194+
195+ #ifndef PR_SME_GET_VL
196+ #define PR_SME_GET_VL 64
197+ #endif
198+
199+ #ifndef PR_SME_VL_LEN_MASK
200+ #define PR_SME_VL_LEN_MASK 0xffff
201+ #endif
202+
203+ ret = prctl (PR_SME_GET_VL );
204+ if (ret < 0 ) {
205+ cpuinfo_log_warning ("No SME support on this machine" );
206+ isa -> smelen = 0 ; // Assume no SME support if the call fails
207+ } else {
208+ // Mask out the SME vector length bits
209+ isa -> smelen = ret & PR_SME_VL_LEN_MASK ;
210+ }
194211}
212+
Original file line number Diff line number Diff line change @@ -178,6 +178,7 @@ int main(int argc, char** argv) {
178178
179179 printf ("ARM SVE Capabilities:\n" );
180180 printf ("\tSVE max length: %d\n" , cpuinfo_get_max_arm_sve_length ());
181+ printf ("\tSME max length: %d\n" , cpuinfo_get_max_arm_sme_length ());
181182
182183 printf ("Cryptography extensions:\n" );
183184 printf ("\tAES: %s\n" , cpuinfo_has_arm_aes () ? "yes" : "no" );
You can’t perform that action at this time.
0 commit comments