summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorAntonin ENFRUN <antonin.e@me.com>2014-05-12 00:24:41 +0200
committerAntonin ENFRUN <antonin.e@me.com>2014-05-12 09:06:18 +0200
commitceac71f1f54220d64c87a0c2ebfd583ea49ca037 (patch)
treed1d723666f031c0478925749c4da451f7fa95b9c
parent1b901c320b28b85ea83972570675f2e701a06b4e (diff)
downloadmicropython-ceac71f1f54220d64c87a0c2ebfd583ea49ca037.tar.gz
micropython-ceac71f1f54220d64c87a0c2ebfd583ea49ca037.zip
unix: Add asm statements needed to read registers with clang. Code generated by gcc 4.9.0 is unchanged (same statements, different order).
Both are inefficient, saving unmodified registers on the stack.
-rw-r--r--unix/gccollect.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/unix/gccollect.c b/unix/gccollect.c
index 647a1214de..1b5a38ffc6 100644
--- a/unix/gccollect.c
+++ b/unix/gccollect.c
@@ -43,11 +43,17 @@ typedef machine_uint_t regs_t[6];
void gc_helper_get_regs(regs_t arr) {
register long rbx asm ("rbx");
+ asm("" : "=r"(rbx));
register long rbp asm ("rbp");
+ asm("" : "=r"(rbp));
register long r12 asm ("r12");
+ asm("" : "=r"(r12));
register long r13 asm ("r13");
+ asm("" : "=r"(r13));
register long r14 asm ("r14");
+ asm("" : "=r"(r14));
register long r15 asm ("r15");
+ asm("" : "=r"(r15));
arr[0] = rbx;
arr[1] = rbp;
arr[2] = r12;