First set of licensing changes
[mono.git] / mono / utils / mono-hwcap-arm.c
index d5d5f00ecb397323b208350881f85a706e77dc80..6cf8065d06a43e421bfb59737800ff73536d3f86 100644 (file)
@@ -16,6 +16,7 @@
  * Copyright 2006 Broadcom
  * Copyright 2007-2008 Andreas Faerber
  * Copyright 2011-2013 Xamarin Inc
+ * Licensed under the MIT license. See LICENSE file in the project root for full license information.
  */
 
 #include "mono/utils/mono-hwcap-arm.h"
 gboolean mono_hwcap_arm_is_v5 = FALSE;
 gboolean mono_hwcap_arm_is_v6 = FALSE;
 gboolean mono_hwcap_arm_is_v7 = FALSE;
-gboolean mono_hwcap_arm_is_v7s = FALSE;
 gboolean mono_hwcap_arm_has_vfp = FALSE;
+gboolean mono_hwcap_arm_has_vfp3 = FALSE;
+gboolean mono_hwcap_arm_has_vfp3_d16 = FALSE;
 gboolean mono_hwcap_arm_has_thumb = FALSE;
 gboolean mono_hwcap_arm_has_thumb2 = FALSE;
 
-#if defined(MONO_CROSS_COMPILE)
-void
-mono_hwcap_arch_init (void)
-{
-}
-#else
 void
 mono_hwcap_arch_init (void)
 {
@@ -57,9 +53,17 @@ mono_hwcap_arch_init (void)
                        mono_hwcap_arm_has_thumb = TRUE;
 
                /* HWCAP_ARM_VFP */
-               if (hwcap & 0x00000064)
+               if (hwcap & 0x00000040)
                        mono_hwcap_arm_has_vfp = TRUE;
 
+               /* HWCAP_ARM_VFPv3 */
+               if (hwcap & 0x00002000)
+                       mono_hwcap_arm_has_vfp3 = TRUE;
+
+               /* HWCAP_ARM_VFPv3D16 */
+               if (hwcap & 0x00004000)
+                       mono_hwcap_arm_has_vfp3_d16 = TRUE;
+
                /* TODO: Find a way to detect Thumb 2. */
        }
 
@@ -136,6 +140,12 @@ mono_hwcap_arch_init (void)
                                if (strstr (line, "vfp"))
                                        mono_hwcap_arm_has_vfp = TRUE;
 
+                               if (strstr (line, "vfpv3"))
+                                       mono_hwcap_arm_has_vfp3 = TRUE;
+
+                               if (strstr (line, "vfpv3-d16"))
+                                       mono_hwcap_arm_has_vfp3_d16 = TRUE;
+
                                continue;
                        }
                }
@@ -144,7 +154,6 @@ mono_hwcap_arch_init (void)
        }
 #endif
 }
-#endif
 
 void
 mono_hwcap_print(FILE *f)
@@ -152,8 +161,9 @@ mono_hwcap_print(FILE *f)
        g_fprintf (f, "mono_hwcap_arm_is_v5 = %i\n", mono_hwcap_arm_is_v5);
        g_fprintf (f, "mono_hwcap_arm_is_v6 = %i\n", mono_hwcap_arm_is_v6);
        g_fprintf (f, "mono_hwcap_arm_is_v7 = %i\n", mono_hwcap_arm_is_v7);
-       g_fprintf (f, "mono_hwcap_arm_is_v7s = %i\n", mono_hwcap_arm_is_v7s);
        g_fprintf (f, "mono_hwcap_arm_has_vfp = %i\n", mono_hwcap_arm_has_vfp);
+       g_fprintf (f, "mono_hwcap_arm_has_vfp3 = %i\n", mono_hwcap_arm_has_vfp3);
+       g_fprintf (f, "mono_hwcap_arm_has_vfp3_d16 = %i\n", mono_hwcap_arm_has_vfp3_d16);
        g_fprintf (f, "mono_hwcap_arm_has_thumb = %i\n", mono_hwcap_arm_has_thumb);
        g_fprintf (f, "mono_hwcap_arm_has_thumb2 = %i\n", mono_hwcap_arm_has_thumb2);
 }