Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Zwinkau
libfirm
Commits
5e5fae24
Commit
5e5fae24
authored
Apr 03, 2016
by
Matthias Braun
Browse files
arm: Really fix memperm this time
parent
fcce4d9b
Changes
1
Hide whitespace changes
Inline
Side-by-side
ir/be/arm/arm_emitter.c
View file @
5e5fae24
...
...
@@ -542,27 +542,27 @@ static void emit_be_MemPerm(const ir_node *node)
int
const
memperm_offset
=
be_get_MemPerm_offset
(
node
);
int
sp
_offset
=
memperm_offset
;
int
ent
_offset
=
memperm_offset
;
for
(
int
i
=
0
;
i
<
memperm_arity
;
++
i
)
{
/* spill register */
arm_emitf
(
node
,
"str r%d, [sp, #-4]!"
,
i
);
sp
_offset
-
=
4
;
ent
_offset
+
=
4
;
/* load from entity */
ir_entity
*
entity
=
be_get_MemPerm_in_entity
(
node
,
i
);
int
offset
=
get_entity_offset
(
entity
)
+
sp
_offset
;
int
offset
=
get_entity_offset
(
entity
)
+
ent
_offset
;
arm_emitf
(
node
,
"ldr r%d, [sp, #%d]"
,
i
,
offset
);
}
for
(
int
i
=
memperm_arity
;
i
--
>
0
;
)
{
/* store to new entity */
ir_entity
*
entity
=
be_get_MemPerm_out_entity
(
node
,
i
);
int
offset
=
get_entity_offset
(
entity
)
+
sp
_offset
;
int
offset
=
get_entity_offset
(
entity
)
+
ent
_offset
;
arm_emitf
(
node
,
"str r%d, [sp, #%d]"
,
i
,
offset
);
/* restore register */
arm_emitf
(
node
,
"ldr r%d, [sp], #4"
,
i
);
sp
_offset
+
=
4
;
ent
_offset
-
=
4
;
}
assert
(
sp
_offset
==
memperm_offset
);
assert
(
ent
_offset
==
memperm_offset
);
}
static
void
emit_arm_Jmp
(
const
ir_node
*
node
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment