From eaed1c96beb1ac134585af8588148eec5d2ba223 Mon Sep 17 00:00:00 2001 From: Henri Gomez Date: Tue, 18 Oct 2016 17:10:43 +0200 Subject: [PATCH] ASIMD detection on ARMv8 --- libretro-common/features/features_cpu.c | 10 ++++++++++ libretro-common/include/libretro.h | 1 + 2 files changed, 11 insertions(+) diff --git a/libretro-common/features/features_cpu.c b/libretro-common/features/features_cpu.c index 611f38f493..1e9dcd00ca 100644 --- a/libretro-common/features/features_cpu.c +++ b/libretro-common/features/features_cpu.c @@ -704,6 +704,15 @@ uint64_t cpu_features_get(void) if (check_arm_cpu_feature("vfpv4")) cpu |= RETRO_SIMD_VFPV4; + if (check_arm_cpu_feature("asymd")) + { + cpu |= RETRO_SIMD_ASIMD; +#ifdef __ARM_NEON__ + cpu |= RETRO_SIMD_NEON; + arm_enable_runfast_mode(); +#endif + } + #if 0 check_arm_cpu_feature("swp"); check_arm_cpu_feature("half"); @@ -748,6 +757,7 @@ uint64_t cpu_features_get(void) if (cpu & RETRO_SIMD_VMX128) strlcat(buf, " VMX128", sizeof(buf)); if (cpu & RETRO_SIMD_VFPU) strlcat(buf, " VFPU", sizeof(buf)); if (cpu & RETRO_SIMD_PS) strlcat(buf, " PS", sizeof(buf)); + if (cpu & RETRO_SIMD_ASIMD) strlcat(buf, " ASIMD", sizeof(buf)); return cpu; } diff --git a/libretro-common/include/libretro.h b/libretro-common/include/libretro.h index 2579e8bb5a..d1f4674e7f 100644 --- a/libretro-common/include/libretro.h +++ b/libretro-common/include/libretro.h @@ -1316,6 +1316,7 @@ struct retro_log_callback #define RETRO_SIMD_POPCNT (1 << 18) #define RETRO_SIMD_MOVBE (1 << 19) #define RETRO_SIMD_CMOV (1 << 20) +#define RETRO_SIMD_ASIMD (1 << 21) typedef uint64_t retro_perf_tick_t; typedef int64_t retro_time_t;