mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-14 02:27:39 -04:00
On ARMv7-M, stm/ldm instructions can't include SP, so we must load and store that separately. This changes the order of registers in the context struct, but it doesn't seem to be accessed anywhere else so this shouldn't cause any problems. Change-Id: Ie1cd23272f23384e030f51f0b76739624fa7332b
56 lines
1.9 KiB
C
56 lines
1.9 KiB
C
/***************************************************************************
|
|
* __________ __ ___.
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
* \/ \/ \/ \/ \/
|
|
* $Id$
|
|
*
|
|
* Copyright (C) 2002 by Ulf Ralberg
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#include "config.h"
|
|
|
|
#if defined(CPU_ARM_MICRO) && ARCH_VERSION >= 7
|
|
/*
|
|
* Cortex-M cannot load/store SP with ldm/stm so we need to store it
|
|
* separately. This makes it slightly more efficient to store SP last
|
|
* so as not to split the register list.
|
|
*/
|
|
struct regs
|
|
{
|
|
uint32_t r[8]; /* 0-28 - Registers r4-r11 */
|
|
uint32_t lr; /* 32 - r14 (lr) */
|
|
uint32_t sp; /* 36 - Stack pointer (r13) */
|
|
uint32_t start; /* 40 - Thread start address, or NULL when started */
|
|
};
|
|
#else
|
|
struct regs
|
|
{
|
|
uint32_t r[8]; /* 0-28 - Registers r4-r11 */
|
|
uint32_t sp; /* 32 - Stack pointer (r13) */
|
|
uint32_t lr; /* 36 - r14 (lr) */
|
|
uint32_t start; /* 40 - Thread start address, or NULL when started */
|
|
};
|
|
#endif
|
|
|
|
#if (CONFIG_PLATFORM & PLATFORM_HOSTED)
|
|
#include <errno.h>
|
|
#if defined(DX50) || defined (DX90)
|
|
#define DEFAULT_STACK_SIZE 0x2000 /* Bytes */
|
|
#else
|
|
#define DEFAULT_STACK_SIZE 0x1000 /* Bytes */
|
|
#endif
|
|
#else
|
|
#define DEFAULT_STACK_SIZE 0x400 /* Bytes */
|
|
#endif
|