Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZoltan Varga <vargaz@gmail.com>2016-03-17 13:14:41 +0300
committerAlexis Christoforides <alexis@thenull.net>2016-03-22 22:48:53 +0300
commitd2a0cd87a0d500f73dd8c324e68a93474b1a9d0c (patch)
tree532e89ad6137b66b8714ab0d42ae2f6acc509581
parent832de4b8b4537fd2fc91bfc41f92414b789e446d (diff)
[arm] Avoid storing fp arguments below the stack pointer if the param area has size 0. Fixes #38161.mono-4.2.0-branch-c6sr2
-rw-r--r--mono/mini/mini-arm.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/mono/mini/mini-arm.c b/mono/mini/mini-arm.c
index addb060e58c..c143423b38b 100644
--- a/mono/mini/mini-arm.c
+++ b/mono/mini/mini-arm.c
@@ -2332,6 +2332,7 @@ mono_arch_emit_call (MonoCompile *cfg, MonoCallInst *call)
} else {
int creg;
+ cfg->param_area = MAX (cfg->param_area, 8);
MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORER4_MEMBASE_REG, ARMREG_SP, (cfg->param_area - 8), in->dreg);
creg = mono_alloc_ireg (cfg);
MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOAD_MEMBASE, creg, ARMREG_SP, (cfg->param_area - 8));
@@ -2353,6 +2354,7 @@ mono_arch_emit_call (MonoCompile *cfg, MonoCallInst *call)
} else {
int creg;
+ cfg->param_area = MAX (cfg->param_area, 8);
MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORER8_MEMBASE_REG, ARMREG_SP, (cfg->param_area - 8), in->dreg);
creg = mono_alloc_ireg (cfg);
MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOAD_MEMBASE, creg, ARMREG_SP, (cfg->param_area - 8));
@@ -2424,6 +2426,7 @@ mono_arch_emit_call (MonoCompile *cfg, MonoCallInst *call)
/* This should work for soft-float as well */
+ cfg->param_area = MAX (cfg->param_area, 8);
MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORER8_MEMBASE_REG, ARMREG_SP, (cfg->param_area - 8), in->dreg);
creg = mono_alloc_ireg (cfg);
mono_call_inst_add_outarg_reg (cfg, call, creg, ARMREG_R3, FALSE);