Merge pull request #2261 from BrzVlad/fix-arm-fast-tls-master
[mono.git] / mono / mini / mini-arm.c
index 6c58747fc5f63e8abfb8396b4c7cf18a39531516..a71aa353c19e450658b146d1ed6d3357a1a1a6df 100644 (file)
@@ -95,8 +95,8 @@ void sys_icache_invalidate (void *start, size_t len);
 #endif
 
 /* This mutex protects architecture specific caches */
-#define mono_mini_arch_lock() mono_mutex_lock (&mini_arch_mutex)
-#define mono_mini_arch_unlock() mono_mutex_unlock (&mini_arch_mutex)
+#define mono_mini_arch_lock() mono_os_mutex_lock (&mini_arch_mutex)
+#define mono_mini_arch_unlock() mono_os_mutex_unlock (&mini_arch_mutex)
 static mono_mutex_t mini_arch_mutex;
 
 static gboolean v5_supported = FALSE;
@@ -891,7 +891,7 @@ mono_arch_init (void)
 {
        const char *cpu_arch;
 
-       mono_mutex_init_recursive (&mini_arch_mutex);
+       mono_os_mutex_init_recursive (&mini_arch_mutex);
        if (mini_get_debug_options ()->soft_breakpoints) {
                breakpoint_tramp = mini_get_breakpoint_trampoline ();
        } else {
@@ -4059,6 +4059,12 @@ mono_arm_emit_load_imm (guint8 *code, int dreg, guint32 val)
        code += 4;
        return code;
 #endif
+       if (mini_get_debug_options()->single_imm_size && v7_supported) {
+               ARM_MOVW_REG_IMM (code, dreg, val & 0xffff);
+               ARM_MOVT_REG_IMM (code, dreg, (val >> 16) & 0xffff);
+               return code;
+       }
+
        if ((imm8 = mono_arm_is_rotated_imm8 (val, &rot_amount)) >= 0) {
                ARM_MOV_REG_IMM (code, dreg, imm8, rot_amount);
        } else if ((imm8 = mono_arm_is_rotated_imm8 (~val, &rot_amount)) >= 0) {