mirror of
https://github.com/shadps4-emu/ext-SDL.git
synced 2025-01-14 06:31:05 +00:00
riscos: Add CPU feature detection
This commit is contained in:
parent
eb3d39bc8b
commit
78ce18f5cf
@ -90,6 +90,11 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __RISCOS__
|
||||||
|
#include <kernel.h>
|
||||||
|
#include <swis.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define CPU_HAS_RDTSC (1 << 0)
|
#define CPU_HAS_RDTSC (1 << 0)
|
||||||
#define CPU_HAS_ALTIVEC (1 << 1)
|
#define CPU_HAS_ALTIVEC (1 << 1)
|
||||||
#define CPU_HAS_MMX (1 << 2)
|
#define CPU_HAS_MMX (1 << 2)
|
||||||
@ -333,7 +338,7 @@ CPU_haveAltiVec(void)
|
|||||||
return altivec;
|
return altivec;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(__ARM_ARCH)
|
#if !defined(__arm__)
|
||||||
static int
|
static int
|
||||||
CPU_haveARMSIMD(void)
|
CPU_haveARMSIMD(void)
|
||||||
{
|
{
|
||||||
@ -373,6 +378,27 @@ CPU_haveARMSIMD(void)
|
|||||||
return arm_simd;
|
return arm_simd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif defined(__RISCOS__)
|
||||||
|
|
||||||
|
static int
|
||||||
|
CPU_haveARMSIMD(void)
|
||||||
|
{
|
||||||
|
_kernel_swi_regs regs;
|
||||||
|
regs.r[0] = 0;
|
||||||
|
if (_kernel_swi(OS_PlatformFeatures, ®s, ®s) != NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!(regs.r[0] & (1<<31)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
regs.r[0] = 34;
|
||||||
|
regs.r[1] = 29;
|
||||||
|
if (_kernel_swi(OS_PlatformFeatures, ®s, ®s) != NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return regs.r[0];
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
static int
|
static int
|
||||||
CPU_haveARMSIMD(void)
|
CPU_haveARMSIMD(void)
|
||||||
@ -419,7 +445,7 @@ CPU_haveNEON(void)
|
|||||||
# endif
|
# endif
|
||||||
/* All WinRT ARM devices are required to support NEON, but just in case. */
|
/* All WinRT ARM devices are required to support NEON, but just in case. */
|
||||||
return IsProcessorFeaturePresent(PF_ARM_NEON_INSTRUCTIONS_AVAILABLE) != 0;
|
return IsProcessorFeaturePresent(PF_ARM_NEON_INSTRUCTIONS_AVAILABLE) != 0;
|
||||||
#elif !defined(__ARM_ARCH)
|
#elif !defined(__arm__)
|
||||||
return 0; /* not an ARM CPU at all. */
|
return 0; /* not an ARM CPU at all. */
|
||||||
#elif __ARM_ARCH >= 8
|
#elif __ARM_ARCH >= 8
|
||||||
return 1; /* ARMv8 always has non-optional NEON support. */
|
return 1; /* ARMv8 always has non-optional NEON support. */
|
||||||
@ -446,6 +472,18 @@ CPU_haveNEON(void)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#elif defined(__RISCOS__)
|
||||||
|
/* Use the VFPSupport_Features SWI to access the MVFR registers */
|
||||||
|
{
|
||||||
|
_kernel_swi_regs regs;
|
||||||
|
regs.r[0] = 0;
|
||||||
|
if (_kernel_swi(VFPSupport_Features, ®s, ®s) == NULL) {
|
||||||
|
if ((regs.r[2] & 0xFFF000) == 0x111000) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
#warning SDL_HasNEON is not implemented for this ARM platform. Write me.
|
#warning SDL_HasNEON is not implemented for this ARM platform. Write me.
|
||||||
return 0;
|
return 0;
|
||||||
@ -871,6 +909,15 @@ SDL_GetSystemRAM(void)
|
|||||||
SDL_SystemRAM = (int) (sysram / 0x100000U);
|
SDL_SystemRAM = (int) (sysram / 0x100000U);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __RISCOS__
|
||||||
|
if (SDL_SystemRAM <= 0) {
|
||||||
|
_kernel_swi_regs regs;
|
||||||
|
regs.r[0] = 0x108;
|
||||||
|
if (_kernel_swi(OS_Memory, ®s, ®s) == NULL) {
|
||||||
|
SDL_SystemRAM = (int)(regs.r[1] * regs.r[2] / (1024 * 1024));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return SDL_SystemRAM;
|
return SDL_SystemRAM;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user