#elif CPU_ARM
- #define CPU_SAVED_REGS_CNT 9
+ #define CPU_SAVED_REGS_CNT 10
#define CPU_STACK_GROWS_UPWARD 0
#define CPU_SP_ON_EMPTY_SLOT 0
* - ARM state.
* - CPU in Supervisor Mode (SVC).
*/
- #define CPU_REG_INIT_VALUE(reg) (reg == (CPU_SAVED_REGS_CNT - 1) ? 0x13 : 0)
+ #define CPU_REG_INIT_VALUE(reg) \
+ ({ int a = 0; \
+ if(reg == 0) \
+ a = (int)proc_exit; \
+ else if(reg == (CPU_SAVED_REGS_CNT - 1)) \
+ a = 0x13; \
+ a; \
+ })
#elif CPU_PPC
#if !CPU_SP_ON_EMPTY_SLOT
/* DSP56K and other weirdos */
#define CPU_PUSH_WORD(sp, data) \
- do { *++(sp) = (cpustack_t)(data); } while (0)
+ do { *++(sp) = (cpu_stack_t)(data); } while (0)
#define CPU_POP_WORD(sp) \
(*(sp)--)
#else
#define CPU_PUSH_CALL_FRAME(sp, func) \
do { \
- CPU_PUSH_WORD((sp), (cpustack_t)(func)); /* LR -> 8(SP) */ \
+ CPU_PUSH_WORD((sp), (cpu_stack_t)(func)); /* LR -> 8(SP) */ \
CPU_PUSH_WORD((sp), 0); /* CR -> 4(SP) */ \
} while (0)
#else
#define CPU_PUSH_CALL_FRAME(sp, func) \
- CPU_PUSH_WORD((sp), (cpustack_t)(func))
+ CPU_PUSH_WORD((sp), (cpu_stack_t)(func))
#endif
/**
* in hosted environments such as emulators.
*/
#ifndef CPU_IDLE
- #if defined(ARCH_EMUL) && (ARCH & ARCH_EMUL)
+ #if defined(ARCH_QT) && (ARCH & ARCH_QT)
/* This emulator hook should yield the CPU to the host. */
EXTERN_C_BEGIN
void emul_idle(void);