X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcpu%2Fframe.h;h=e8d0f898973458fe214c4ad1e5272b86ccda1ad1;hb=2b5b0770b846951186a57551112bbd4ec7dbf1be;hp=90995a8a7c13c652d859532852a68487968b53aa;hpb=fc34a91daf3bab5fac57c928bb4bb948e002e0fb;p=bertos.git diff --git a/bertos/cpu/frame.h b/bertos/cpu/frame.h index 90995a8a..e8d0f898 100644 --- a/bertos/cpu/frame.h +++ b/bertos/cpu/frame.h @@ -52,19 +52,14 @@ #if CPU_X86 #if CPU_X86_32 - #define CPU_SAVED_REGS_CNT 2 - #define CPU_STACK_GROWS_UPWARD 0 - #define CPU_SP_ON_EMPTY_SLOT 0 - #elif CPU_X86_64 - #define CPU_SAVED_REGS_CNT 8 - #define CPU_STACK_GROWS_UPWARD 0 - #define CPU_SP_ON_EMPTY_SLOT 0 #else #error "unknown CPU" #endif + #define CPU_STACK_GROWS_UPWARD 0 + #define CPU_SP_ON_EMPTY_SLOT 0 #elif CPU_ARM @@ -72,6 +67,12 @@ #define CPU_STACK_GROWS_UPWARD 0 #define CPU_SP_ON_EMPTY_SLOT 0 +#elif CPU_CM3 + + #define CPU_SAVED_REGS_CNT 8 + #define CPU_STACK_GROWS_UPWARD 0 + #define CPU_SP_ON_EMPTY_SLOT 0 + #elif CPU_PPC #define CPU_SAVED_REGS_CNT 1 @@ -154,6 +155,15 @@ CPU_PUSH_WORD((sp), 0x100); \ } while (0); +#elif CPU_CM3 + + + #define CPU_PUSH_CALL_FRAME(sp, func) \ + do { \ + CPU_PUSH_WORD((sp), 0x01000000); /* xPSR */ \ + CPU_PUSH_WORD((sp), (cpu_stack_t)(func)); /* lr */ \ + } while (0); + #elif CPU_AVR /* * On AVR, addresses are pushed into the stack as little-endian, while @@ -214,15 +224,7 @@ * in hosted environments such as emulators. */ #ifndef CPU_IDLE - #if defined(ARCH_QT) && (ARCH & ARCH_QT) - /* This emulator hook should yield the CPU to the host. */ - EXTERN_C_BEGIN - void emul_idle(void); - EXTERN_C_END - #define CPU_IDLE emul_idle() - #else /* !ARCH_EMUL */ - #define CPU_IDLE do { /* nothing */ } while (0) - #endif /* !ARCH_EMUL */ + #define CPU_IDLE PAUSE #endif /* !CPU_IDLE */ /**