Код
static __inline unsigned long __get_CPSR(void)
{
register unsigned long ret;
__asm
{
MRS ret, CPSR;
}
return ret;
}
{
register unsigned long ret;
__asm
{
MRS ret, CPSR;
}
return ret;
}
Так работает. Для любого Кортекса тоже, если заменить CPSR на другой регистр специального назначения. Но, если заменить этот регистр на SP или R13 с инструкцией MOV, то уже не работает. Функция компилится без ошибок, но значения не возвращает, т.к. кода функции (инструкций процессора) нет вообще. А в R0 (где результат функции) какое-то старое содержимое.
Код
static __inline unsigned long __get_SP(void)
{
register volatile unsigned long stck __asm("sp");
return stck;
}
{
register volatile unsigned long stck __asm("sp");
return stck;
}
Этот вариант аналогично не ругается и код функции отсутствует.