Make __get_current_exception inline (#1016)

not `static` inline, so we keep an implementation around if needed (someone might have called it from assembly)
This commit is contained in:
alastairpatrick 2022-09-12 13:28:18 -07:00 committed by GitHub
parent 849cdf8a30
commit 98aba25e64
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 9 deletions

View File

@ -396,7 +396,11 @@ __force_inline static int32_t __mul_instruction(int32_t a, int32_t b) {
*
* \return the exception number if the CPU is handling an exception, or 0 otherwise
*/
uint __get_current_exception(void);
inline uint __get_current_exception(void) {
uint exception;
asm ("mrs %0, ipsr" : "=l" (exception));
return exception;
}
#define WRAPPER_FUNC(x) __wrap_ ## x
#define REAL_FUNC(x) __real_ ## x

View File

@ -8,6 +8,7 @@
#include "hardware/regs/m0plus.h"
#include "hardware/regs/addressmap.h"
#include "hardware/regs/sio.h"
#include "pico/asm_helper.S"
#include "pico/binary_info/defs.h"
#ifdef NDEBUG
@ -147,7 +148,7 @@ decl_isr isr_irq31
.global __unhandled_user_irq
.thumb_func
__unhandled_user_irq:
bl __get_current_exception
mrs r0, ipsr
subs r0, #16
.global unhandled_user_irq_num_in_r0
unhandled_user_irq_num_in_r0:
@ -325,13 +326,6 @@ hold_non_core0_in_bootrom:
bl rom_func_lookup
bx r0
.global __get_current_exception
.thumb_func
__get_current_exception:
mrs r0, ipsr
uxtb r0, r0
bx lr
// ----------------------------------------------------------------------------
// Stack/heap dummies to set size