arm_fpu = MONO_ARM_FPU_VFP;
#if defined(ARM_FPU_NONE) && !defined(__APPLE__)
- /* If we're compiling with a soft float fallback and it
- turns out that no VFP unit is available, we need to
- switch to soft float. We don't do this for iOS, since
- iOS devices always have a VFP unit. */
+ /*
+ * If we're compiling with a soft float fallback and it
+ * turns out that no VFP unit is available, we need to
+ * switch to soft float. We don't do this for iOS, since
+ * iOS devices always have a VFP unit.
+ */
if (!mono_hwcap_arm_has_vfp)
arm_fpu = MONO_ARM_FPU_NONE;
+
+ /*
+ * This environment variable can be useful in testing
+ * environments to make sure the soft float fallback
+ * works. Most ARM devices have VFP units these days, so
+ * normally soft float code would not be exercised much.
+ */
+ const char *soft = g_getenv ("MONO_ARM_FORCE_SOFT_FLOAT");
+
+ if (soft && !strncmp (soft, "1", 1))
+ arm_fpu = MONO_ARM_FPU_NONE;
#endif
#endif
* the extra stack space would be left on the stack after the tail call.
*/
res = c1->stack_usage >= c2->stack_usage;
- callee_ret = mini_replace_type (callee_sig->ret);
+ callee_ret = mini_get_underlying_type (cfg, callee_sig->ret);
if (callee_ret && MONO_TYPE_ISSTRUCT (callee_ret) && c2->ret.storage != RegTypeStructByVal)
/* An address on the callee's stack is passed as the first argument */
res = FALSE;
if (!cfg->arch.cinfo)
cfg->arch.cinfo = get_call_info (cfg->generic_sharing_context, cfg->mempool, sig);
cinfo = cfg->arch.cinfo;
- sig_ret = mini_replace_type (sig->ret);
+ sig_ret = mini_get_underlying_type (cfg, sig->ret);
mono_arch_compute_omit_fp (cfg);