diff --git a/audio/audio_dsp_filter.c b/audio/audio_dsp_filter.c index 09a7759ae5..e781683918 100644 --- a/audio/audio_dsp_filter.c +++ b/audio/audio_dsp_filter.c @@ -147,7 +147,7 @@ static const dspfilter_get_implementation_t dsp_plugs_builtin[] = { static bool append_plugs(rarch_dsp_filter_t *dsp, struct string_list *list) { unsigned i; - dspfilter_simd_mask_t mask = retro_get_cpu_features(); + dspfilter_simd_mask_t mask = cpu_features_get(); (void)list; @@ -171,7 +171,7 @@ static bool append_plugs(rarch_dsp_filter_t *dsp, struct string_list *list) static bool append_plugs(rarch_dsp_filter_t *dsp, struct string_list *list) { unsigned i; - dspfilter_simd_mask_t mask = retro_get_cpu_features(); + dspfilter_simd_mask_t mask = cpu_features_get(); for (i = 0; i < list->size; i++) { diff --git a/audio/audio_resampler_driver.c b/audio/audio_resampler_driver.c index b4b770db5c..a50d70fece 100644 --- a/audio/audio_resampler_driver.c +++ b/audio/audio_resampler_driver.c @@ -143,7 +143,7 @@ retro_get_cpu_features_t perf_get_cpu_features_cb; static resampler_simd_mask_t resampler_get_cpu_features(void) { #ifdef RARCH_INTERNAL - return retro_get_cpu_features(); + return cpu_features_get(); #else return perf_get_cpu_features_cb(); #endif diff --git a/audio/audio_utils.c b/audio/audio_utils.c index 0946d57651..51b5f9b9a1 100644 --- a/audio/audio_utils.c +++ b/audio/audio_utils.c @@ -410,7 +410,7 @@ retro_get_cpu_features_t perf_get_cpu_features_cb; static unsigned audio_convert_get_cpu_features(void) { #ifdef RARCH_INTERNAL - return retro_get_cpu_features(); + return cpu_features_get(); #else return perf_get_cpu_features_cb(); #endif diff --git a/dynamic.c b/dynamic.c index ddd52747e9..e89bdfa18d 100644 --- a/dynamic.c +++ b/dynamic.c @@ -1122,9 +1122,9 @@ bool rarch_environment_cb(unsigned cmd, void *data) struct retro_perf_callback *cb = (struct retro_perf_callback*)data; RARCH_LOG("Environ GET_PERF_INTERFACE.\n"); - cb->get_time_usec = retro_get_time_usec; - cb->get_cpu_features = retro_get_cpu_features; - cb->get_perf_counter = retro_get_perf_counter; + cb->get_time_usec = cpu_features_get_time_usec; + cb->get_cpu_features = cpu_features_get; + cb->get_perf_counter = cpu_features_get_perf_counter; cb->perf_register = retro_perf_register; cb->perf_start = retro_perf_start; diff --git a/gfx/video_driver.c b/gfx/video_driver.c index 6f1bcd39dd..8b380a7dc4 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -983,7 +983,7 @@ bool video_monitor_get_fps(char *buf, size_t size, { static retro_time_t curr_time; static retro_time_t fps_time; - retro_time_t new_time = retro_get_time_usec(); + retro_time_t new_time = cpu_features_get_time_usec(); *buf = '\0'; diff --git a/gfx/video_filter.c b/gfx/video_filter.c index 0f72d35560..fe46697bce 100644 --- a/gfx/video_filter.c +++ b/gfx/video_filter.c @@ -204,7 +204,7 @@ static bool create_softfilter_graph(rarch_softfilter_t *filt, filt->impl_data = filt->impl->create( &softfilter_config, input_fmt, input_fmt, max_width, max_height, threads != RARCH_SOFTFILTER_THREADS_AUTO ? threads : - retro_get_cpu_cores(), cpu_features, + cpu_features_get_core_amount(), cpu_features, &userdata); if (!filt->impl_data) { @@ -262,7 +262,7 @@ static bool append_softfilter_plugs(rarch_softfilter_t *filt, struct string_list *list) { unsigned i; - softfilter_simd_mask_t mask = retro_get_cpu_features(); + softfilter_simd_mask_t mask = cpu_features_get(); for (i = 0; i < list->size; i++) { @@ -345,7 +345,7 @@ static bool append_softfilter_plugs(rarch_softfilter_t *filt, struct string_list *list) { unsigned i; - softfilter_simd_mask_t mask = retro_get_cpu_features(); + softfilter_simd_mask_t mask = cpu_features_get(); (void)list; @@ -382,7 +382,7 @@ rarch_softfilter_t *rarch_softfilter_new(const char *filter_config, enum retro_pixel_format in_pixel_format, unsigned max_width, unsigned max_height) { - softfilter_simd_mask_t cpu_features = retro_get_cpu_features(); + softfilter_simd_mask_t cpu_features = cpu_features_get(); char basedir[PATH_MAX_LENGTH]; #ifdef HAVE_DYLIB char ext_name[PATH_MAX_LENGTH]; diff --git a/gfx/video_thread_wrapper.c b/gfx/video_thread_wrapper.c index aa03dccb43..b4b8ca1155 100644 --- a/gfx/video_thread_wrapper.c +++ b/gfx/video_thread_wrapper.c @@ -692,7 +692,7 @@ static bool video_thread_frame(void *data, const void *frame_, /* Ideally, use absolute time, but that is only a good idea on POSIX. */ while (thr->frame.updated) { - retro_time_t current = retro_get_time_usec(); + retro_time_t current = cpu_features_get_time_usec(); retro_time_t delta = target - current; if (delta <= 0) @@ -743,7 +743,7 @@ static bool video_thread_frame(void *data, const void *frame_, retro_perf_stop(&thr_frame); - thr->last_time = retro_get_time_usec(); + thr->last_time = cpu_features_get_time_usec(); return true; } @@ -783,7 +783,7 @@ static bool video_thread_init(thread_video_t *thr, const video_info_t *info, memset(thr->frame.buffer, 0x80, max_size); - thr->last_time = retro_get_time_usec(); + thr->last_time = cpu_features_get_time_usec(); thr->thread = sthread_create(video_thread_loop, thr); if (!thr->thread) diff --git a/menu/drivers/menu_generic.c b/menu/drivers/menu_generic.c index fa0e875a99..c1bd67114d 100644 --- a/menu/drivers/menu_generic.c +++ b/menu/drivers/menu_generic.c @@ -53,11 +53,11 @@ static int action_iterate_help(menu_handle_t *menu, int64_t timeout; static bool timer_begin = false; static bool timer_end = false; - int64_t current = retro_get_time_usec(); + int64_t current = cpu_features_get_time_usec(); if (!timer_begin) { - timeout_end = retro_get_time_usec() + + timeout_end = cpu_features_get_time_usec() + 3 /* seconds */ * 1000000; timer_begin = true; timer_end = false; diff --git a/menu/menu_animation.c b/menu/menu_animation.c index be5365859d..db267ec8fb 100644 --- a/menu/menu_animation.c +++ b/menu/menu_animation.c @@ -560,7 +560,7 @@ bool menu_animation_ctl(enum menu_animation_ctl_state state, void *data) static retro_time_t last_clock_update = 0; settings_t *settings = config_get_ptr(); - cur_time = retro_get_time_usec(); + cur_time = cpu_features_get_time_usec(); delta_time = cur_time - old_time; if (delta_time >= IDEAL_DELTA_TIME* 4) diff --git a/menu/menu_input.c b/menu/menu_input.c index cfc431e7ca..0025dd668d 100644 --- a/menu/menu_input.c +++ b/menu/menu_input.c @@ -267,7 +267,7 @@ static bool menu_input_key_bind_custom_bind_keyboard_cb( menu_input->binds.target->key = (enum retro_key)code; menu_input->binds.begin++; menu_input->binds.target++; - menu_input->binds.timeout_end = retro_get_time_usec() + + menu_input->binds.timeout_end = cpu_features_get_time_usec() + MENU_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000; return (menu_input->binds.begin <= menu_input->binds.last); @@ -455,7 +455,7 @@ static bool menu_input_key_bind_set_mode( menu_input_key_bind_poll_bind_state( &menu_input->binds, bind_port, false); - menu_input->binds.timeout_end = retro_get_time_usec() + + menu_input->binds.timeout_end = cpu_features_get_time_usec() + MENU_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000; keys.userdata = menu; @@ -574,7 +574,7 @@ static bool menu_input_key_bind_iterate(char *s, size_t len) struct menu_bind_state binds; bool timed_out = false; menu_input_t *menu_input = menu_input_get_ptr(); - int64_t current = retro_get_time_usec(); + int64_t current = cpu_features_get_time_usec(); int timeout = (menu_input->binds.timeout_end - current) / 1000000; @@ -584,7 +584,7 @@ static bool menu_input_key_bind_iterate(char *s, size_t len) menu_input->binds.begin++; menu_input->binds.target++; - menu_input->binds.timeout_end = retro_get_time_usec() + + menu_input->binds.timeout_end = cpu_features_get_time_usec() + MENU_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000; timed_out = true; } @@ -631,7 +631,7 @@ static bool menu_input_key_bind_iterate(char *s, size_t len) } binds.target++; - binds.timeout_end = retro_get_time_usec() + + binds.timeout_end = cpu_features_get_time_usec() + MENU_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000; } menu_input->binds = binds; diff --git a/network/net_http_special.c b/network/net_http_special.c index 62fb7c2dc7..2c488c614c 100644 --- a/network/net_http_special.c +++ b/network/net_http_special.c @@ -24,12 +24,12 @@ int net_http_get(const char **result, size_t *size, const char *url, retro_time_t *timeout) { - uint8_t* data; size_t length; - char* res; - int ret = NET_HTTP_GET_OK; - struct http_t* http = NULL; - retro_time_t t0 = retro_get_time_usec(); + uint8_t* data = NULL; + char* res = NULL; + int ret = NET_HTTP_GET_OK; + struct http_t* http = NULL; + retro_time_t t0 = cpu_features_get_time_usec(); struct http_connection_t *conn = net_http_connection_new(url); *result = NULL; @@ -60,7 +60,7 @@ int net_http_get(const char **result, size_t *size, const char *url, retro_time_ while (!net_http_update(http, NULL, NULL)) { /* Timeout error. */ - if (timeout && (retro_get_time_usec() - t0) > *timeout) + if (timeout && (cpu_features_get_time_usec() - t0) > *timeout) { ret = NET_HTTP_GET_TIMEOUT; goto error; @@ -99,7 +99,7 @@ error: if (timeout) { - t0 = retro_get_time_usec() - t0; + t0 = cpu_features_get_time_usec() - t0; if (t0 < *timeout) *timeout -= t0; diff --git a/performance.c b/performance.c index fcbc516359..b165192103 100644 --- a/performance.c +++ b/performance.c @@ -27,7 +27,9 @@ #define PERF_LOG_FMT "[PERF]: Avg (%s): %llu ticks, %llu runs.\n" #endif -#if !defined(_WIN32) && !defined(RARCH_CONSOLE) +#if defined(_WIN32) +#include +#else #include #endif @@ -110,13 +112,13 @@ static int clock_gettime(int clk_ik, struct timespec *t) #endif /** - * retro_get_perf_counter: + * cpu_features_get_perf_counter: * * Gets performance counter. * * Returns: performance counter. **/ -retro_perf_tick_t retro_get_perf_counter(void) +retro_perf_tick_t cpu_features_get_perf_counter(void) { retro_perf_tick_t time_ticks = 0; #if defined(__linux__) || defined(__QNX__) || defined(__MACH__) @@ -125,16 +127,12 @@ retro_perf_tick_t retro_get_perf_counter(void) time_ticks = (retro_perf_tick_t)tv.tv_sec * 1000000000 + (retro_perf_tick_t)tv.tv_nsec; -#elif defined(__GNUC__) && !defined(RARCH_CONSOLE) - -#if defined(__i386__) || defined(__i486__) || defined(__i686__) +#elif defined(__GNUC__) && defined(__i386__) || defined(__i486__) || defined(__i686__) __asm__ volatile ("rdtsc" : "=A" (time_ticks)); -#elif defined(__x86_64__) +#elif defined(__GNUC__) && defined(__x86_64__) unsigned a, d; __asm__ volatile ("rdtsc" : "=a" (a), "=d" (d)); time_ticks = (retro_perf_tick_t)a | ((retro_perf_tick_t)d << 32); -#endif - #elif defined(__ARM_ARCH_6__) __asm__ volatile( "mrc p15, 0, %0, c9, c13, 0" : "=r"(time_ticks) ); #elif defined(__CELLOS_LV2__) || defined(_XBOX360) || defined(__powerpc__) || defined(__ppc__) || defined(__POWERPC__) @@ -171,13 +169,13 @@ retro_perf_tick_t retro_get_perf_counter(void) } /** - * retro_get_time_usec: + * cpu_features_get_time_usec: * * Gets time in microseconds. * * Returns: time in microseconds. **/ -retro_time_t retro_get_time_usec(void) +retro_time_t cpu_features_get_time_usec(void) { #if defined(_WIN32) static LARGE_INTEGER freq; @@ -210,7 +208,7 @@ retro_time_t retro_get_time_usec(void) #elif defined(VITA) return sceKernelGetProcessTimeWide(); #else -#error "Your platform does not have a timer function implemented in retro_get_time_usec(). Cannot continue." +#error "Your platform does not have a timer function implemented in cpu_features_get_time_usec(). Cannot continue." #endif } @@ -245,7 +243,7 @@ void x86_cpuid(int func, int flags[4]) #elif defined(_MSC_VER) __cpuid(flags, func); #else - RARCH_WARN("Unknown compiler. Cannot check CPUID with inline assembly.\n"); + printf("Unknown compiler. Cannot check CPUID with inline assembly.\n"); memset(flags, 0, 4 * sizeof(int)); #endif } @@ -267,7 +265,7 @@ static uint64_t xgetbv_x86(uint32_t idx) /* Intrinsic only works on 2010 SP1 and above. */ return _xgetbv(idx); #else - RARCH_WARN("Unknown compiler. Cannot check xgetbv bits.\n"); + printf("Unknown compiler. Cannot check xgetbv bits.\n"); return 0; #endif } @@ -293,13 +291,13 @@ static void arm_enable_runfast_mode(void) #endif /** - * retro_get_cpu_cores: + * cpu_features_get_core_amount: * * Gets the amount of available CPU cores. * * Returns: amount of CPU cores available. **/ -unsigned retro_get_cpu_cores(void) +unsigned cpu_features_get_core_amount(void) { #if defined(_WIN32) && !defined(_XBOX) /* Win32 */ @@ -354,13 +352,13 @@ unsigned retro_get_cpu_cores(void) #define VENDOR_INTEL_d 0x49656e69 /** - * retro_get_cpu_features: + * cpu_features_get: * * Gets CPU features.. * * Returns: bitmask of all CPU features available. **/ -uint64_t retro_get_cpu_features(void) +uint64_t cpu_features_get(void) { int flags[4]; int vendor_shuffle[3]; @@ -389,53 +387,53 @@ uint64_t retro_get_cpu_features(void) len = sizeof(size_t); if (sysctlbyname("hw.optional.mmx", NULL, &len, NULL, 0) == 0) { - cpu |= RETRO_SIMD_MMX; - cpu |= RETRO_SIMD_MMXEXT; + cpu |= CPU_FEATURE_MMX; + cpu |= CPU_FEATURE_MMXEXT; } len = sizeof(size_t); if (sysctlbyname("hw.optional.sse", NULL, &len, NULL, 0) == 0) - cpu |= RETRO_SIMD_SSE; + cpu |= CPU_FEATURE_SSE; len = sizeof(size_t); if (sysctlbyname("hw.optional.sse2", NULL, &len, NULL, 0) == 0) - cpu |= RETRO_SIMD_SSE2; + cpu |= CPU_FEATURE_SSE2; len = sizeof(size_t); if (sysctlbyname("hw.optional.sse3", NULL, &len, NULL, 0) == 0) - cpu |= RETRO_SIMD_SSE3; + cpu |= CPU_FEATURE_SSE3; len = sizeof(size_t); if (sysctlbyname("hw.optional.supplementalsse3", NULL, &len, NULL, 0) == 0) - cpu |= RETRO_SIMD_SSSE3; + cpu |= CPU_FEATURE_SSSE3; len = sizeof(size_t); if (sysctlbyname("hw.optional.sse4_1", NULL, &len, NULL, 0) == 0) - cpu |= RETRO_SIMD_SSE4; + cpu |= CPU_FEATURE_SSE4; len = sizeof(size_t); if (sysctlbyname("hw.optional.sse4_2", NULL, &len, NULL, 0) == 0) - cpu |= RETRO_SIMD_SSE42; + cpu |= CPU_FEATURE_SSE42; len = sizeof(size_t); if (sysctlbyname("hw.optional.aes", NULL, &len, NULL, 0) == 0) - cpu |= RETRO_SIMD_AES; + cpu |= CPU_FEATURE_AES; len = sizeof(size_t); if (sysctlbyname("hw.optional.avx1_0", NULL, &len, NULL, 0) == 0) - cpu |= RETRO_SIMD_AVX; + cpu |= CPU_FEATURE_AVX; len = sizeof(size_t); if (sysctlbyname("hw.optional.avx2_0", NULL, &len, NULL, 0) == 0) - cpu |= RETRO_SIMD_AVX2; + cpu |= CPU_FEATURE_AVX2; len = sizeof(size_t); if (sysctlbyname("hw.optional.altivec", NULL, &len, NULL, 0) == 0) - cpu |= RETRO_SIMD_VMX; + cpu |= CPU_FEATURE_VMX; len = sizeof(size_t); if (sysctlbyname("hw.optional.neon", NULL, &len, NULL, 0) == 0) - cpu |= RETRO_SIMD_NEON; + cpu |= CPU_FEATURE_NEON; #elif defined(CPU_X86) (void)avx_flags; @@ -446,7 +444,7 @@ uint64_t retro_get_cpu_features(void) vendor_shuffle[2] = flags[2]; memcpy(vendor, vendor_shuffle, sizeof(vendor_shuffle)); - RARCH_LOG("[CPUID]: Vendor: %s\n", vendor); + printf("[CPUID]: Vendor: %s\n", vendor); vendor_is_intel = ( flags[1] == VENDOR_INTEL_b && @@ -460,52 +458,52 @@ uint64_t retro_get_cpu_features(void) x86_cpuid(1, flags); if (flags[3] & (1 << 23)) - cpu |= RETRO_SIMD_MMX; + cpu |= CPU_FEATURE_MMX; if (flags[3] & (1 << 25)) { /* SSE also implies MMXEXT (according to FFmpeg source). */ - cpu |= RETRO_SIMD_SSE; - cpu |= RETRO_SIMD_MMXEXT; + cpu |= CPU_FEATURE_SSE; + cpu |= CPU_FEATURE_MMXEXT; } if (flags[3] & (1 << 26)) - cpu |= RETRO_SIMD_SSE2; + cpu |= CPU_FEATURE_SSE2; if (flags[2] & (1 << 0)) - cpu |= RETRO_SIMD_SSE3; + cpu |= CPU_FEATURE_SSE3; if (flags[2] & (1 << 9)) - cpu |= RETRO_SIMD_SSSE3; + cpu |= CPU_FEATURE_SSSE3; if (flags[2] & (1 << 19)) - cpu |= RETRO_SIMD_SSE4; + cpu |= CPU_FEATURE_SSE4; if (flags[2] & (1 << 20)) - cpu |= RETRO_SIMD_SSE42; + cpu |= CPU_FEATURE_SSE42; if ((flags[2] & (1 << 23))) - cpu |= RETRO_SIMD_POPCNT; + cpu |= CPU_FEATURE_POPCNT; if (vendor_is_intel && (flags[2] & (1 << 22))) - cpu |= RETRO_SIMD_MOVBE; + cpu |= CPU_FEATURE_MOVBE; if (flags[2] & (1 << 25)) - cpu |= RETRO_SIMD_AES; + cpu |= CPU_FEATURE_AES; /* Must only perform xgetbv check if we have * AVX CPU support (guaranteed to have at least i686). */ if (((flags[2] & avx_flags) == avx_flags) && ((xgetbv_x86(0) & 0x6) == 0x6)) - cpu |= RETRO_SIMD_AVX; + cpu |= CPU_FEATURE_AVX; if (max_flag >= 7) { x86_cpuid(7, flags); if (flags[1] & (1 << 5)) - cpu |= RETRO_SIMD_AVX2; + cpu |= CPU_FEATURE_AVX2; } x86_cpuid(0x80000000, flags); @@ -514,55 +512,55 @@ uint64_t retro_get_cpu_features(void) { x86_cpuid(0x80000001, flags); if (flags[3] & (1 << 23)) - cpu |= RETRO_SIMD_MMX; + cpu |= CPU_FEATURE_MMX; if (flags[3] & (1 << 22)) - cpu |= RETRO_SIMD_MMXEXT; + cpu |= CPU_FEATURE_MMXEXT; } #elif defined(__linux__) cpu_flags = linux_get_cpu_features(); if (cpu_flags & CPU_ARM_FEATURE_NEON) { - cpu |= RETRO_SIMD_NEON; + cpu |= CPU_FEATURE_NEON; #ifdef __ARM_NEON__ arm_enable_runfast_mode(); #endif } if (cpu_flags & CPU_ARM_FEATURE_VFPv3) - cpu |= RETRO_SIMD_VFPV3; + cpu |= CPU_FEATURE_VFPV3; #elif defined(__ARM_NEON__) - cpu |= RETRO_SIMD_NEON; + cpu |= CPU_FEATURE_NEON; arm_enable_runfast_mode(); #elif defined(__ALTIVEC__) - cpu |= RETRO_SIMD_VMX; + cpu |= CPU_FEATURE_VMX; #elif defined(XBOX360) - cpu |= RETRO_SIMD_VMX128; + cpu |= CPU_FEATURE_VMX128; #elif defined(PSP) - cpu |= RETRO_SIMD_VFPU; + cpu |= CPU_FEATURE_VFPU; #elif defined(GEKKO) - cpu |= RETRO_SIMD_PS; + cpu |= CPU_FEATURE_PS; #endif - if (cpu & RETRO_SIMD_MMX) strlcat(buf, " MMX", sizeof(buf)); - if (cpu & RETRO_SIMD_MMXEXT) strlcat(buf, " MMXEXT", sizeof(buf)); - if (cpu & RETRO_SIMD_SSE) strlcat(buf, " SSE", sizeof(buf)); - if (cpu & RETRO_SIMD_SSE2) strlcat(buf, " SSE2", sizeof(buf)); - if (cpu & RETRO_SIMD_SSE3) strlcat(buf, " SSE3", sizeof(buf)); - if (cpu & RETRO_SIMD_SSSE3) strlcat(buf, " SSSE3", sizeof(buf)); - if (cpu & RETRO_SIMD_SSE4) strlcat(buf, " SSE4", sizeof(buf)); - if (cpu & RETRO_SIMD_SSE42) strlcat(buf, " SSE4.2", sizeof(buf)); - if (cpu & RETRO_SIMD_AES) strlcat(buf, " AES", sizeof(buf)); - if (cpu & RETRO_SIMD_AVX) strlcat(buf, " AVX", sizeof(buf)); - if (cpu & RETRO_SIMD_AVX2) strlcat(buf, " AVX2", sizeof(buf)); - if (cpu & RETRO_SIMD_NEON) strlcat(buf, " NEON", sizeof(buf)); - if (cpu & RETRO_SIMD_VFPV3) strlcat(buf, " VFPv3", sizeof(buf)); - if (cpu & RETRO_SIMD_VFPV4) strlcat(buf, " VFPv4", sizeof(buf)); - if (cpu & RETRO_SIMD_VMX) strlcat(buf, " VMX", sizeof(buf)); - 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 & CPU_FEATURE_MMX) strlcat(buf, " MMX", sizeof(buf)); + if (cpu & CPU_FEATURE_MMXEXT) strlcat(buf, " MMXEXT", sizeof(buf)); + if (cpu & CPU_FEATURE_SSE) strlcat(buf, " SSE", sizeof(buf)); + if (cpu & CPU_FEATURE_SSE2) strlcat(buf, " SSE2", sizeof(buf)); + if (cpu & CPU_FEATURE_SSE3) strlcat(buf, " SSE3", sizeof(buf)); + if (cpu & CPU_FEATURE_SSSE3) strlcat(buf, " SSSE3", sizeof(buf)); + if (cpu & CPU_FEATURE_SSE4) strlcat(buf, " SSE4", sizeof(buf)); + if (cpu & CPU_FEATURE_SSE42) strlcat(buf, " SSE4.2", sizeof(buf)); + if (cpu & CPU_FEATURE_AES) strlcat(buf, " AES", sizeof(buf)); + if (cpu & CPU_FEATURE_AVX) strlcat(buf, " AVX", sizeof(buf)); + if (cpu & CPU_FEATURE_AVX2) strlcat(buf, " AVX2", sizeof(buf)); + if (cpu & CPU_FEATURE_NEON) strlcat(buf, " NEON", sizeof(buf)); + if (cpu & CPU_FEATURE_VFPV3) strlcat(buf, " VFPv3", sizeof(buf)); + if (cpu & CPU_FEATURE_VFPV4) strlcat(buf, " VFPv4", sizeof(buf)); + if (cpu & CPU_FEATURE_VMX) strlcat(buf, " VMX", sizeof(buf)); + if (cpu & CPU_FEATURE_VMX128) strlcat(buf, " VMX128", sizeof(buf)); + if (cpu & CPU_FEATURE_VFPU) strlcat(buf, " VFPU", sizeof(buf)); + if (cpu & CPU_FEATURE_PS) strlcat(buf, " PS", sizeof(buf)); return cpu; } diff --git a/performance.h b/performance.h index 71b56a00f1..dac242511d 100644 --- a/performance.h +++ b/performance.h @@ -14,42 +14,78 @@ * If not, see . */ -#ifndef _RARCH_PERF_H -#define _RARCH_PERF_H +#ifndef _LIBRETRO_SDK_CPU_INFO_H +#define _LIBRETRO_SDK_CPU_INFO_H #include +#ifdef RARCH_INTERNAL #include "libretro.h" +#else +typedef uint64_t retro_perf_tick_t; +typedef uint64_t retro_time_t; +#endif + +/* ID values for CPU features */ +#define CPU_FEATURE_SSE (1 << 0) +#define CPU_FEATURE_SSE2 (1 << 1) +#define CPU_FEATURE_VMX (1 << 2) +#define CPU_FEATURE_VMX128 (1 << 3) +#define CPU_FEATURE_AVX (1 << 4) +#define CPU_FEATURE_NEON (1 << 5) +#define CPU_FEATURE_SSE3 (1 << 6) +#define CPU_FEATURE_SSSE3 (1 << 7) +#define CPU_FEATURE_MMX (1 << 8) +#define CPU_FEATURE_MMXEXT (1 << 9) +#define CPU_FEATURE_SSE4 (1 << 10) +#define CPU_FEATURE_SSE42 (1 << 11) +#define CPU_FEATURE_AVX2 (1 << 12) +#define CPU_FEATURE_VFPU (1 << 13) +#define CPU_FEATURE_PS (1 << 14) +#define CPU_FEATURE_AES (1 << 15) +#define CPU_FEATURE_VFPV3 (1 << 16) +#define CPU_FEATURE_VFPV4 (1 << 17) +#define CPU_FEATURE_POPCNT (1 << 18) +#define CPU_FEATURE_MOVBE (1 << 19) #ifdef __cplusplus extern "C" { #endif /** - * retro_get_time_usec: + * cpu_features_get_perf_counter: + * + * Gets performance counter. + * + * Returns: performance counter. + **/ +retro_perf_tick_t cpu_features_get_perf_counter(void); + +/** + * cpu_features_get_time_usec: * * Gets time in microseconds. * * Returns: time in microseconds. **/ -retro_time_t retro_get_time_usec(void); +retro_time_t cpu_features_get_time_usec(void); /** - * retro_get_cpu_features: + * cpu_features_get: * * Gets CPU features.. * * Returns: bitmask of all CPU features available. **/ -uint64_t retro_get_cpu_features(void); +uint64_t cpu_features_get(void); /** - * retro_get_cpu_cores: + * cpu_features_get_core_amount: * * Gets the amount of available CPU cores. * * Returns: amount of CPU cores available. **/ -unsigned retro_get_cpu_cores(void); +unsigned cpu_features_get_core_amount(void); #ifdef __cplusplus diff --git a/performance_counters.c b/performance_counters.c index ce8e4d248a..209e6fb824 100644 --- a/performance_counters.c +++ b/performance_counters.c @@ -17,6 +17,7 @@ #include #include +#include "performance.h" #include "performance_counters.h" #include "general.h" @@ -133,7 +134,7 @@ void retro_perf_start(struct retro_perf_counter *perf) return; perf->call_cnt++; - perf->start = retro_get_perf_counter(); + perf->start = cpu_features_get_perf_counter(); } void retro_perf_stop(struct retro_perf_counter *perf) @@ -141,5 +142,5 @@ void retro_perf_stop(struct retro_perf_counter *perf) if (!runloop_ctl(RUNLOOP_CTL_IS_PERFCNT_ENABLE, NULL) || !perf) return; - perf->total += retro_get_perf_counter() - perf->start; + perf->total += cpu_features_get_perf_counter() - perf->start; } diff --git a/retroarch.c b/retroarch.c index a19faf4fbb..e0f1cff51f 100644 --- a/retroarch.c +++ b/retroarch.c @@ -1545,7 +1545,7 @@ bool rarch_ctl(enum rarch_ctl_state state, void *data) break; case RARCH_CTL_VALIDATE_CPU_FEATURES: { - uint64_t cpu = retro_get_cpu_features(); + uint64_t cpu = cpu_features_get(); (void)cpu; #ifdef __SSE__ @@ -1594,7 +1594,7 @@ int retroarch_get_capabilities(enum rarch_capabilities type, { case RARCH_CAPABILITIES_CPU: { - uint64_t cpu = retro_get_cpu_features(); + uint64_t cpu = cpu_features_get(); if (cpu & RETRO_SIMD_MMX) strlcat(s, "MMX ", len); diff --git a/runloop.c b/runloop.c index 647e15544a..63e4e2d889 100644 --- a/runloop.c +++ b/runloop.c @@ -1316,7 +1316,7 @@ int runloop_iterate(unsigned *sleep_ms) (settings->fastforward_ratio == 0.0f) ? 1.0f : settings->fastforward_ratio; - frame_limit_last_time = retro_get_time_usec(); + frame_limit_last_time = cpu_features_get_time_usec(); frame_limit_minimum_time = (retro_time_t)roundf(1000000.0f / (av_info->timing.fps * fastforward_ratio)); @@ -1343,7 +1343,7 @@ int runloop_iterate(unsigned *sleep_ms) /* Updates frame timing if frame timing callback is in use by the core. * Limits frame time if fast forward ratio throttle is enabled. */ - retro_time_t current = retro_get_time_usec(); + retro_time_t current = cpu_features_get_time_usec(); retro_time_t delta = current - runloop_frame_time_last; bool is_locked_fps = (runloop_ctl(RUNLOOP_CTL_IS_PAUSED, NULL) || input_driver_is_nonblock_state()) | @@ -1513,7 +1513,7 @@ int runloop_iterate(unsigned *sleep_ms) end: #endif - current = retro_get_time_usec(); + current = cpu_features_get_time_usec(); target = frame_limit_last_time + frame_limit_minimum_time; to_sleep_ms = (target - current) / 1000; @@ -1526,7 +1526,7 @@ end: return 1; } - frame_limit_last_time = retro_get_time_usec(); + frame_limit_last_time = cpu_features_get_time_usec(); return 0; }