aboutsummaryrefslogtreecommitdiffstats
path: root/os/rt/ports/ARMCMx/chcore_v6m.h
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2014-02-03 10:21:41 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2014-02-03 10:21:41 +0000
commit1fa828fe7b35e49a77c232b5d95cc6cf7b429e85 (patch)
tree794a2cd13c617a3c51fe5d482b252c64c75d546a /os/rt/ports/ARMCMx/chcore_v6m.h
parentdabe3b813b20ef2dd6286048087ba67e19acdb5d (diff)
downloadChibiOS-1fa828fe7b35e49a77c232b5d95cc6cf7b429e85.tar.gz
ChibiOS-1fa828fe7b35e49a77c232b5d95cc6cf7b429e85.tar.bz2
ChibiOS-1fa828fe7b35e49a77c232b5d95cc6cf7b429e85.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6662 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/rt/ports/ARMCMx/chcore_v6m.h')
-rw-r--r--os/rt/ports/ARMCMx/chcore_v6m.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/os/rt/ports/ARMCMx/chcore_v6m.h b/os/rt/ports/ARMCMx/chcore_v6m.h
index 54054b163..e80efc9b9 100644
--- a/os/rt/ports/ARMCMx/chcore_v6m.h
+++ b/os/rt/ports/ARMCMx/chcore_v6m.h
@@ -205,9 +205,16 @@ struct port_intctx {
* @details This macro must be inserted at the start of all IRQ handlers
* enabled to invoke system APIs.
*/
+#if defined(__GNUC__) || defined(__DOXYGEN__)
#define PORT_IRQ_PROLOGUE() \
- regarm_t _saved_lr; \
- asm volatile ("mov %0, lr" : "=r" (_saved_lr) : : "memory")
+ regarm_t _saved_lr = (regarm_t)__builtin_return_address(0)
+#elif defined(__ICCARM__)
+#define PORT_IRQ_PROLOGUE() \
+ regarm_t _saved_lr = (regarm_t)__get_LR()
+#elif defined(__CC_ARM)
+#define PORT_IRQ_PROLOGUE() \
+ regarm_t _saved_lr = (regarm_t)__return_address()
+#endif
/**
* @brief IRQ epilogue code.