Merge pull request #1949 from lewurm/fixtype
[mono.git] / mono / mini / mini-arm.c
index 460a798a1db6303bc83bac4b0b6c2a106c92b859..bb146818986e679aea290a4ed3019b395778cf84 100644 (file)
@@ -31,7 +31,7 @@
 
 #if defined(HAVE_KW_THREAD) && defined(__linux__) \
        || defined(TARGET_ANDROID) \
-       || defined(TARGET_IOS)
+       || (defined(TARGET_IOS) && !defined(TARGET_WATCHOS))
 #define HAVE_FAST_TLS
 #endif
 
@@ -103,6 +103,7 @@ static gboolean v5_supported = FALSE;
 static gboolean v6_supported = FALSE;
 static gboolean v7_supported = FALSE;
 static gboolean v7s_supported = FALSE;
+static gboolean v7k_supported = FALSE;
 static gboolean thumb_supported = FALSE;
 static gboolean thumb2_supported = FALSE;
 /*
@@ -969,8 +970,6 @@ mono_arch_init (void)
        v5_supported = mono_hwcap_arm_is_v5;
        v6_supported = mono_hwcap_arm_is_v6;
        v7_supported = mono_hwcap_arm_is_v7;
-       v7s_supported = mono_hwcap_arm_is_v7s;
-       v7k_supported = mono_hwcap_arm_is_v7k;
 
 #if defined(__APPLE__)
        /* iOS is special-cased here because we don't yet
@@ -1038,7 +1037,7 @@ mono_arch_cpu_enumerate_simd_versions (void)
 gboolean
 mono_arch_opcode_needs_emulation (MonoCompile *cfg, int opcode)
 {
-       if (v7s_supported) {
+       if (v7s_supported || v7k_supported) {
                switch (opcode) {
                case OP_IDIV:
                case OP_IREM:
@@ -4886,20 +4885,20 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        ARM_AND_REG_IMM (code, ins->dreg, ins->sreg1, imm8, rot_amount);
                        break;
                case OP_IDIV:
-                       g_assert (v7s_supported);
+                       g_assert (v7s_supported || v7k_supported);
                        ARM_SDIV (code, ins->dreg, ins->sreg1, ins->sreg2);
                        break;
                case OP_IDIV_UN:
-                       g_assert (v7s_supported);
+                       g_assert (v7s_supported || v7k_supported);
                        ARM_UDIV (code, ins->dreg, ins->sreg1, ins->sreg2);
                        break;
                case OP_IREM:
-                       g_assert (v7s_supported);
+                       g_assert (v7s_supported || v7k_supported);
                        ARM_SDIV (code, ARMREG_LR, ins->sreg1, ins->sreg2);
                        ARM_MLS (code, ins->dreg, ARMREG_LR, ins->sreg2, ins->sreg1);
                        break;
                case OP_IREM_UN:
-                       g_assert (v7s_supported);
+                       g_assert (v7s_supported || v7k_supported);
                        ARM_UDIV (code, ARMREG_LR, ins->sreg1, ins->sreg2);
                        ARM_MLS (code, ins->dreg, ARMREG_LR, ins->sreg2, ins->sreg1);
                        break;