summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Borzenkov <snaury@gmail.com>2014-10-14 22:32:09 +0400
committerAlexey Borzenkov <snaury@gmail.com>2014-10-14 22:32:09 +0400
commitf90dbe4c24a9aed261a5fa9f66fb95ebdb8f21cc (patch)
treeb2345a2cda2d2c71157c96eaa1ddb4dc89c1c56f
parent1565ffbbe07b6d630b5f86a013a795dac4086c5c (diff)
parent505c91a68aaf5ab56325affd4d8581b32b649cf4 (diff)
downloadgreenlet-f90dbe4c24a9aed261a5fa9f66fb95ebdb8f21cc.tar.gz
Merge pull request #65 from basak/unoptimize-return-value
arm32: force return value from asm
-rw-r--r--platform/switch_arm32_gcc.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/platform/switch_arm32_gcc.h b/platform/switch_arm32_gcc.h
index f74b2bb..842a72c 100644
--- a/platform/switch_arm32_gcc.h
+++ b/platform/switch_arm32_gcc.h
@@ -57,6 +57,7 @@ slp_switch(void)
{
void *fp;
register int *stackref, stsizediff;
+ int result;
__asm__ volatile ("" : : : REGS_TO_SAVE);
__asm__ volatile ("mov r0," REG_FP "\n\tstr r0,%0" : "=m" (fp) : : "r0");
__asm__ ("mov %0," REG_SP : "=r" (stackref));
@@ -70,9 +71,9 @@ slp_switch(void)
);
SLP_RESTORE_STATE();
}
- __asm__ volatile ("ldr r0,%0\n\tmov " REG_FP ",r0" : : "m" (fp) : "r0");
+ __asm__ volatile ("ldr r0,%1\n\tmov " REG_FP ",r0\n\tmov %0, #0" : "=r" (result) : "m" (fp) : "r0");
__asm__ volatile ("" : : : REGS_TO_SAVE);
- return 0;
+ return result;
}
#endif \ No newline at end of file