[arm] Fix register assignments during hfa parameter passing. Fixes pinvoke_ppdcd...
authorZoltan Varga <vargaz@gmail.com>
Thu, 12 Nov 2015 23:48:59 +0000 (18:48 -0500)
committerZoltan Varga <vargaz@gmail.com>
Thu, 12 Nov 2015 23:48:59 +0000 (18:48 -0500)
mono/mini/mini-arm.c

index 08307072a203768d31225a1e2cfe47cc31c9124c..fb502fb547452824c7e66b227f86219687f9d9a7 100644 (file)
@@ -1636,7 +1636,10 @@ get_call_info (MonoMemPool *mp, MonoMethodSignature *sig)
                                        ainfo->reg = fpr;
                                        ainfo->nregs = nfields;
                                        ainfo->esize = esize;
-                                       fpr += nfields;
+                                       if (esize == 4)
+                                               fpr += nfields;
+                                       else
+                                               fpr += nfields * 2;
                                        break;
                                } else {
                                        fpr = ARM_VFP_F16;
@@ -2641,7 +2644,7 @@ mono_arch_emit_outarg_vt (MonoCompile *cfg, MonoInst *ins, MonoInst *src)
 
                                call->float_args = g_slist_append_mempool (cfg->mempool, call->float_args, fad);
                        } else {
-                               add_outarg_reg (cfg, call, RegTypeFP, ainfo->reg + i, load);
+                               add_outarg_reg (cfg, call, RegTypeFP, ainfo->reg + (i * 2), load);
                        }
                }
                break;