Detect ARM architectures better.

Also improved report, and added partial detection for endianness.
This has only been tested on ARMv7l/gcc so far.
This commit is contained in:
King_DuckZ 2014-12-17 17:47:48 +01:00
parent a7b321feb3
commit 9aa245caca
3 changed files with 131 additions and 5 deletions

View file

@ -10,7 +10,11 @@ int main() {
typedef dk::Tyler<2> Tiler; typedef dk::Tyler<2> Tiler;
typedef std::unique_ptr<std::ifstream> ifstreamptr; typedef std::unique_ptr<std::ifstream> ifstreamptr;
std::cout << "Welcome to " << APP_NAME << ' ' << DK_DEVICE_STRING << " version for " << DK_OS_STRING << ' ' << DK_ARCH_STRING << ' ' << DK_BIT_STRING << '\n'; std::cout << "Welcome to " << APP_NAME << ' ' << DK_DEVICE_STRING << " version for " << DK_OS_STRING << ' ' << DK_ARCH_STRING << ' ' << DK_BIT_STRING;
#if defined(DK_ARM)
std::cout << ' ' << DK_ARM_FAMILY_STRING << ' ' << DK_ARM_ARCH_STRING;
#endif
std::cout << '\n';
Tiler tiler(Tiler::coords(10, 6), Tiler::coords(64)); Tiler tiler(Tiler::coords(10, 6), Tiler::coords(64));

View file

@ -1,6 +1,24 @@
#ifndef id054C8BCA27C84EAA825922EC0A4F3317 #ifndef id054C8BCA27C84EAA825922EC0A4F3317
#define id054C8BCA27C84EAA825922EC0A4F3317 #define id054C8BCA27C84EAA825922EC0A4F3317
#if defined(__GNUC__)
# include <endian.h>
#else
# error "Please add endianness detection for your compiler"
#endif
#define DK_ARM_ARCH_6 0
#define DK_ARM_ARCH_6J 1
#define DK_ARM_ARCH_6K 2
#define DK_ARM_ARCH_6Z 3
#define DK_ARM_ARCH_6ZK 4
#define DK_ARM_ARCH_6T2 5
#define DK_ARM_ARCH_7 6
#define DK_ARM_ARCH_7A 7
#define DK_ARM_ARCH_7R 8
#define DK_ARM_ARCH_7M 9
#define DK_ARM_ARCH_7S 10
#if defined(__ANDROID__) #if defined(__ANDROID__)
# define DK_POSIX # define DK_POSIX
# define DK_ANDROID # define DK_ANDROID
@ -29,10 +47,34 @@
# define DK_X86_64 # define DK_X86_64
# define DK_64_BIT # define DK_64_BIT
#elif defined(__arm__) #elif defined(__arm__)
# if defined(__ARMEL__) && __ARMEL__ == 1
# define DK_ARM_EL
# else
# define DK_ARM_HF
# endif
# if defined(__ARM_ARCH_6__) # if defined(__ARM_ARCH_6__)
# define DK_ARM_VERSION 6 # define DK_ARM_ARCH DK_ARM_ARCH_6
# elif defined(__ARM_ARCH_6J__)
# define DK_ARM_ARCH DK_ARM_ARCH_6J
# elif defined(__ARM_ARCH_6K__)
# define DK_ARM_ARCH DK_ARM_ARCH_6K
# elif defined(__ARM_ARCH_6Z__)
# define DK_ARM_ARCH DK_ARM_ARCH_6Z
# elif defined(__ARM_ARCH_6ZK__)
# define DK_ARM_ARCH DK_ARM_ARCH_6ZK
# elif defined(__ARM_ARCH_6T2__)
# define DK_ARM_ARCH DK_ARM_ARCH_6T2
# elif defined(__ARM_ARCH_7__) # elif defined(__ARM_ARCH_7__)
# define DK_ARM_VERSION 7 # define DK_ARM_ARCH DK_ARM_ARCH_7
# elif defined(__ARM_ARCH_7A__)
# define DK_ARM_ARCH DK_ARM_ARCH_7A
# elif defined(__ARM_ARCH_7R__)
# define DK_ARM_ARCH DK_ARM_ARCH_7R
# elif defined(__ARM_ARCH_7M__)
# define DK_ARM_ARCH DK_ARM_ARCH_7M
# elif defined(__ARM_ARCH_7S__)
# define DK_ARM_ARCH DK_ARM_ARCH_7S
# else # else
# error "Unknown ARM version" # error "Unknown ARM version"
# endif # endif
@ -42,7 +84,11 @@
# if _M_ARM != 6 && _M_ARM != 7 # if _M_ARM != 6 && _M_ARM != 7
# error "Unknown ARM version" # error "Unknown ARM version"
# endif # endif
# define DK_ARM_VERSION _M_ARM # if _M_ARM == 6
# define DK_ARM_ARCH DK_ARM_ARCH_6
# elif _M_ARM == 7
# define DK_ARM_ARC DK_ARM_ARCH_7
# endif
# define DK_32_BIT # define DK_32_BIT
# define DK_ARM # define DK_ARM
#elif defined(__TARGET_ARCH_ARM) #elif defined(__TARGET_ARCH_ARM)
@ -68,4 +114,39 @@
# error "Unknown architecture" # error "Unknown architecture"
#endif #endif
#if defined(DK_ARM_ARCH)
# if DK_ARM_ARCH == DK_ARM_ARCH_6 || DK_ARM_ARCH == DK_ARM_ARCH_6J || \
DK_ARM_ARCH == DK_ARM_ARCH_6K || DK_ARM_ARCH == DK_ARM_ARCH_6Z || \
DK_ARM_ARCH == DK_ARM_ARCH_6ZK || DK_ARM_ARCH == DK_ARM_ARCH_6T2
# define DK_ARM_VERSION 6
# elif DK_ARM_ARCH == DK_ARM_ARCH_7 || DK_ARM_ARCH == DK_ARM_ARCH_7A || \
DK_ARM_ARCH == DK_ARM_ARCH_7R || DK_ARM_ARCH == DK_ARM_ARCH_7M || \
DK_ARM_ARCH == DK_ARM_ARCH_7S
# define DK_ARM_VERSION 7
# else
# error "Unknown ARM version"
# endif
# if defined(__GNUC__)
# if defined(__ARM_PCS_VFP)
# define DK_ARM_HARDFLOAT
# elif defined(__ARM_PCS)
# define DK_ARM_SOFTFLOAT
# else
# error "Unkown floating point mode"
# endif
# else
# error "Unknown compiler"
# endif
#endif
#if defined(__ARMEB__) || \
(defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN)
# define DK_BIG_ENDIAN
#elif defined(__ARMEL__) || \
(defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN)
# define DK_LITTLE_ENDIAN
#else
# error "Unknown endianness"
#endif
#endif #endif

View file

@ -14,9 +14,18 @@
#if defined(DK_ARM) #if defined(DK_ARM)
# if defined(DK_32_BIT) # if defined(DK_32_BIT)
# define DK_ARCH_STRING "ARMv" STRINGIZE(DK_ARM_VERSION) # if defined(DK_LITTLE_ENDIAN)
# define DK_ARCH_STRING "ARMv" STRINGIZE(DK_ARM_VERSION) " (v" \
STRINGIZE(DK_ARM_VERSION) "l)"
# elif defined(DK_BIG_ENDIAN)
# define DK_ARCH_STRING "ARMv" STRINGIZE(DK_ARM_VERSION) " (v" \
STRINGIZE(DK_ARM_VERSION) "b)"
# else
# error "Unkonwn endianness"
# endif
# else # else
# define DK_ARCH_STRING "ARM" # define DK_ARCH_STRING "ARM"
# error "Never tested, please make sure this branch is correct"
# endif # endif
#elif defined(DK_X86) #elif defined(DK_X86)
# define DK_ARCH_STRING "x86" # define DK_ARCH_STRING "x86"
@ -44,4 +53,36 @@
# error "No device type defined" # error "No device type defined"
#endif #endif
#if defined(DK_ARM_ARCH)
# if DK_ARM_ARCH == DK_ARM_ARCH_6 || DK_ARM_ARCH == DK_ARM_ARCH_6J
# define DK_ARM_FAMILY_STRING "ARM11"
# define DK_ARM_ARCH_STRING "ARMv6"
# elif DK_ARM_ARCH == DK_ARM_ARCH_6Z
# define DK_ARM_FAMILY_STRING "ARM11"
# define DK_ARM_ARCH_STRING "ARMv6Z"
# elif DK_ARM_ARCH == DK_ARM_ARCH_6K
# define DK_ARM_FAMILY_STRING "ARM11"
# define DK_ARM_ARCH_STRING "ARMv6K"
# elif DK_ARM_ARCH == DK_ARM_ARCH_6ZK
# error "Missing data - please fill in"
# elif DK_ARM_ARCH == DK_ARM_ARCH_6T2
# define DK_ARM_FAMILY_STRING "ARM11"
# define DK_ARM_ARCH_STRING "ARMv6T2"
# elif DK_ARM_ARCH == DK_ARM_ARCH_7
# error "Missing data - please fill in"
# elif DK_ARM_ARCH == DK_ARM_ARCH_7M
# define DK_ARM_FAMILY_STRING "Cortex-M"
# define DK_ARM_ARCH_STRING "ARMv7-M"
# elif DK_ARM_ARCH == DK_ARM_ARCH_7R
# define DK_ARM_FAMILY_STRING "Cortex-R"
# define DK_ARM_ARCH_STRING "ARMv7-R"
# elif DK_ARM_ARCH == DK_ARM_ARCH_7A
# define DK_ARM_FAMILY_STRING "Cortex-A"
# define DK_ARM_ARCH_STRING "ARMv7-A"
# elif DK_ARM_ARCH == DK_ARM_ARCH_7S
# define DK_ARM_FAMILY_STRING "Apple-A6"
# define DK_ARM_ARCH_STRING "ARMv7-A"
# endif
#endif
#endif #endif