Merge pull request #1124 from SummerGGift/add_arm_8-byte_alignment

[libcpu]: add 8-byte alignment for arm architecture && optimize code …
This commit is contained in:
Bernard Xiong 2017-12-21 17:07:34 +08:00 committed by GitHub
commit d78f5eb674
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 325 additions and 298 deletions

View File

@ -32,24 +32,27 @@
rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
rt_uint8_t *stack_addr, void *texit) rt_uint8_t *stack_addr, void *texit)
{ {
unsigned long *stk; rt_uint32_t *stk;
stk = (unsigned long *)stack_addr; stack_addr += sizeof(rt_uint32_t);
*(stk) = (unsigned long)tentry; /* entry point */ stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
*(--stk) = (unsigned long)texit; /* lr */ stk = (rt_uint32_t *)stack_addr;
*(--stk) = 0; /* r12 */
*(--stk) = 0; /* r11 */ *(--stk) = (rt_uint32_t)tentry; /* entry point */
*(--stk) = 0; /* r10 */ *(--stk) = (rt_uint32_t)texit; /* lr */
*(--stk) = 0; /* r9 */ *(--stk) = 0xdeadbeef; /* r12 */
*(--stk) = 0; /* r8 */ *(--stk) = 0xdeadbeef; /* r11 */
*(--stk) = 0; /* r7 */ *(--stk) = 0xdeadbeef; /* r10 */
*(--stk) = 0; /* r6 */ *(--stk) = 0xdeadbeef; /* r9 */
*(--stk) = 0; /* r5 */ *(--stk) = 0xdeadbeef; /* r8 */
*(--stk) = 0; /* r4 */ *(--stk) = 0xdeadbeef; /* r7 */
*(--stk) = 0; /* r3 */ *(--stk) = 0xdeadbeef; /* r6 */
*(--stk) = 0; /* r2 */ *(--stk) = 0xdeadbeef; /* r5 */
*(--stk) = 0; /* r1 */ *(--stk) = 0xdeadbeef; /* r4 */
*(--stk) = (unsigned long)parameter; /* r0 : argument */ *(--stk) = 0xdeadbeef; /* r3 */
*(--stk) = 0xdeadbeef; /* r2 */
*(--stk) = 0xdeadbeef; /* r1 */
*(--stk) = (rt_uint32_t)parameter; /* r0 : argument */
*(--stk) = SVCMODE; /* cpsr */ *(--stk) = SVCMODE; /* cpsr */
*(--stk) = SVCMODE; /* spsr */ *(--stk) = SVCMODE; /* spsr */

View File

@ -33,24 +33,26 @@
rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
rt_uint8_t *stack_addr, void *texit) rt_uint8_t *stack_addr, void *texit)
{ {
unsigned long *stk; rt_uint32_t *stk;
stk = (unsigned long *)stack_addr; stack_addr += sizeof(rt_uint32_t);
*(stk) = (unsigned long)tentry; /* entry point */ stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
*(--stk) = (unsigned long)texit; /* lr */ stk = (rt_uint32_t *)stack_addr;
*(--stk) = 0; /* r12 */ *(--stk) = (rt_uint32_t)tentry; /* entry point */
*(--stk) = 0; /* r11 */ *(--stk) = (rt_uint32_t)texit; /* lr */
*(--stk) = 0; /* r10 */ *(--stk) = 0xdeadbeef; /* r12 */
*(--stk) = 0; /* r9 */ *(--stk) = 0xdeadbeef; /* r11 */
*(--stk) = 0; /* r8 */ *(--stk) = 0xdeadbeef; /* r10 */
*(--stk) = 0; /* r7 */ *(--stk) = 0xdeadbeef; /* r9 */
*(--stk) = 0; /* r6 */ *(--stk) = 0xdeadbeef; /* r8 */
*(--stk) = 0; /* r5 */ *(--stk) = 0xdeadbeef; /* r7 */
*(--stk) = 0; /* r4 */ *(--stk) = 0xdeadbeef; /* r6 */
*(--stk) = 0; /* r3 */ *(--stk) = 0xdeadbeef; /* r5 */
*(--stk) = 0; /* r2 */ *(--stk) = 0xdeadbeef; /* r4 */
*(--stk) = 0; /* r1 */ *(--stk) = 0xdeadbeef; /* r3 */
*(--stk) = (unsigned long)parameter; /* r0 : argument */ *(--stk) = 0xdeadbeef; /* r2 */
*(--stk) = 0xdeadbeef; /* r1 */
*(--stk) = (rt_uint32_t)parameter; /* r0 : argument */
*(--stk) = SVCMODE; /* cpsr */ *(--stk) = SVCMODE; /* cpsr */
*(--stk) = SVCMODE; /* spsr */ *(--stk) = SVCMODE; /* spsr */

View File

@ -35,21 +35,24 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
{ {
rt_uint32_t *stk; rt_uint32_t *stk;
stack_addr += sizeof(rt_uint32_t);
stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
stk = (rt_uint32_t *)stack_addr; stk = (rt_uint32_t *)stack_addr;
*(stk) = (rt_uint32_t)tentry; /* entry point */
*(--stk) = (rt_uint32_t)tentry; /* entry point */
*(--stk) = (rt_uint32_t)texit; /* lr */ *(--stk) = (rt_uint32_t)texit; /* lr */
*(--stk) = 0; /* r12 */ *(--stk) = 0xdeadbeef; /* r12 */
*(--stk) = 0; /* r11 */ *(--stk) = 0xdeadbeef; /* r11 */
*(--stk) = 0; /* r10 */ *(--stk) = 0xdeadbeef; /* r10 */
*(--stk) = 0; /* r9 */ *(--stk) = 0xdeadbeef; /* r9 */
*(--stk) = 0; /* r8 */ *(--stk) = 0xdeadbeef; /* r8 */
*(--stk) = 0; /* r7 */ *(--stk) = 0xdeadbeef; /* r7 */
*(--stk) = 0; /* r6 */ *(--stk) = 0xdeadbeef; /* r6 */
*(--stk) = 0; /* r5 */ *(--stk) = 0xdeadbeef; /* r5 */
*(--stk) = 0; /* r4 */ *(--stk) = 0xdeadbeef; /* r4 */
*(--stk) = 0; /* r3 */ *(--stk) = 0xdeadbeef; /* r3 */
*(--stk) = 0; /* r2 */ *(--stk) = 0xdeadbeef; /* r2 */
*(--stk) = 0; /* r1 */ *(--stk) = 0xdeadbeef; /* r1 */
*(--stk) = (rt_uint32_t)parameter; /* r0 : argument */ *(--stk) = (rt_uint32_t)parameter; /* r0 : argument */
/* cpsr */ /* cpsr */

View File

@ -50,7 +50,6 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
{ {
rt_uint32_t *stk; rt_uint32_t *stk;
//stk = (rt_uint32_t*)stack_addr;
stack_addr += sizeof(rt_uint32_t); stack_addr += sizeof(rt_uint32_t);
stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8); stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
stk = (rt_uint32_t *)stack_addr; stk = (rt_uint32_t *)stack_addr;

View File

@ -36,21 +36,23 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
{ {
rt_uint32_t *stk; rt_uint32_t *stk;
stack_addr += sizeof(rt_uint32_t);
stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
stk = (rt_uint32_t *)stack_addr; stk = (rt_uint32_t *)stack_addr;
*(stk) = (rt_uint32_t)tentry; /* entry point */ *(--stk) = (rt_uint32_t)tentry; /* entry point */
*(--stk) = (rt_uint32_t)texit; /* lr */ *(--stk) = (rt_uint32_t)texit; /* lr */
*(--stk) = 0; /* r12 */ *(--stk) = 0xdeadbeef; /* r12 */
*(--stk) = 0; /* r11 */ *(--stk) = 0xdeadbeef; /* r11 */
*(--stk) = 0; /* r10 */ *(--stk) = 0xdeadbeef; /* r10 */
*(--stk) = 0; /* r9 */ *(--stk) = 0xdeadbeef; /* r9 */
*(--stk) = 0; /* r8 */ *(--stk) = 0xdeadbeef; /* r8 */
*(--stk) = 0; /* r7 */ *(--stk) = 0xdeadbeef; /* r7 */
*(--stk) = 0; /* r6 */ *(--stk) = 0xdeadbeef; /* r6 */
*(--stk) = 0; /* r5 */ *(--stk) = 0xdeadbeef; /* r5 */
*(--stk) = 0; /* r4 */ *(--stk) = 0xdeadbeef; /* r4 */
*(--stk) = 0; /* r3 */ *(--stk) = 0xdeadbeef; /* r3 */
*(--stk) = 0; /* r2 */ *(--stk) = 0xdeadbeef; /* r2 */
*(--stk) = 0; /* r1 */ *(--stk) = 0xdeadbeef; /* r1 */
*(--stk) = (rt_uint32_t)parameter; /* r0 : argument */ *(--stk) = (rt_uint32_t)parameter; /* r0 : argument */
/* cpsr */ /* cpsr */

View File

@ -33,24 +33,26 @@
rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
rt_uint8_t *stack_addr, void *texit) rt_uint8_t *stack_addr, void *texit)
{ {
unsigned long *stk; rt_uint32_t *stk;
stk = (unsigned long*)stack_addr; stack_addr += sizeof(rt_uint32_t);
*( stk) = (unsigned long) tentry; /* entry point */ stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
*(--stk) = (unsigned long) texit; /* lr */ stk = (rt_uint32_t *)stack_addr;
*(--stk) = 0; /* r12 */ *(--stk) = (rt_uint32_t)tentry; /* entry point */
*(--stk) = 0; /* r11 */ *(--stk) = (rt_uint32_t)texit; /* lr */
*(--stk) = 0; /* r10 */ *(--stk) = 0xdeadbeef; /* r12 */
*(--stk) = 0; /* r9 */ *(--stk) = 0xdeadbeef; /* r11 */
*(--stk) = 0; /* r8 */ *(--stk) = 0xdeadbeef; /* r10 */
*(--stk) = 0; /* r7 */ *(--stk) = 0xdeadbeef; /* r9 */
*(--stk) = 0; /* r6 */ *(--stk) = 0xdeadbeef; /* r8 */
*(--stk) = 0; /* r5 */ *(--stk) = 0xdeadbeef; /* r7 */
*(--stk) = 0; /* r4 */ *(--stk) = 0xdeadbeef; /* r6 */
*(--stk) = 0; /* r3 */ *(--stk) = 0xdeadbeef; /* r5 */
*(--stk) = 0; /* r2 */ *(--stk) = 0xdeadbeef; /* r4 */
*(--stk) = 0; /* r1 */ *(--stk) = 0xdeadbeef; /* r3 */
*(--stk) = (unsigned long)parameter; /* r0 : argument */ *(--stk) = 0xdeadbeef; /* r2 */
*(--stk) = 0xdeadbeef; /* r1 */
*(--stk) = (rt_uint32_t)parameter; /* r0 : argument */
/* cpsr */ /* cpsr */
if ((rt_uint32_t)tentry & 0x01) if ((rt_uint32_t)tentry & 0x01)

View File

@ -50,21 +50,23 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
{ {
rt_uint32_t *stk; rt_uint32_t *stk;
stack_addr += sizeof(rt_uint32_t);
stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
stk = (rt_uint32_t *)stack_addr; stk = (rt_uint32_t *)stack_addr;
*(stk) = (rt_uint32_t)tentry; /* entry point */ *(--stk) = (rt_uint32_t)tentry; /* entry point */
*(--stk) = (rt_uint32_t)texit; /* lr */ *(--stk) = (rt_uint32_t)texit; /* lr */
*(--stk) = 0; /* r12 */ *(--stk) = 0xdeadbeef; /* r12 */
*(--stk) = 0; /* r11 */ *(--stk) = 0xdeadbeef; /* r11 */
*(--stk) = 0; /* r10 */ *(--stk) = 0xdeadbeef; /* r10 */
*(--stk) = 0; /* r9 */ *(--stk) = 0xdeadbeef; /* r9 */
*(--stk) = 0; /* r8 */ *(--stk) = 0xdeadbeef; /* r8 */
*(--stk) = 0; /* r7 */ *(--stk) = 0xdeadbeef; /* r7 */
*(--stk) = 0; /* r6 */ *(--stk) = 0xdeadbeef; /* r6 */
*(--stk) = 0; /* r5 */ *(--stk) = 0xdeadbeef; /* r5 */
*(--stk) = 0; /* r4 */ *(--stk) = 0xdeadbeef; /* r4 */
*(--stk) = 0; /* r3 */ *(--stk) = 0xdeadbeef; /* r3 */
*(--stk) = 0; /* r2 */ *(--stk) = 0xdeadbeef; /* r2 */
*(--stk) = 0; /* r1 */ *(--stk) = 0xdeadbeef; /* r1 */
*(--stk) = (rt_uint32_t)parameter; /* r0 : argument */ *(--stk) = (rt_uint32_t)parameter; /* r0 : argument */
/* cpsr */ /* cpsr */

View File

@ -32,24 +32,27 @@
rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
rt_uint8_t *stack_addr, void *texit) rt_uint8_t *stack_addr, void *texit)
{ {
unsigned long *stk; rt_uint32_t *stk;
stk = (unsigned long *)stack_addr; stack_addr += sizeof(rt_uint32_t);
*(stk) = (unsigned long)tentry; /* entry point */ stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
*(--stk) = (unsigned long)texit; /* lr */ stk = (rt_uint32_t *)stack_addr;
*(--stk) = 0; /* r12 */
*(--stk) = 0; /* r11 */ *(--stk) = (rt_uint32_t)tentry; /* entry point */
*(--stk) = 0; /* r10 */ *(--stk) = (rt_uint32_t)texit; /* lr */
*(--stk) = 0; /* r9 */ *(--stk) = 0xdeadbeef; /* r12 */
*(--stk) = 0; /* r8 */ *(--stk) = 0xdeadbeef; /* r11 */
*(--stk) = 0; /* r7 */ *(--stk) = 0xdeadbeef; /* r10 */
*(--stk) = 0; /* r6 */ *(--stk) = 0xdeadbeef; /* r9 */
*(--stk) = 0; /* r5 */ *(--stk) = 0xdeadbeef; /* r8 */
*(--stk) = 0; /* r4 */ *(--stk) = 0xdeadbeef; /* r7 */
*(--stk) = 0; /* r3 */ *(--stk) = 0xdeadbeef; /* r6 */
*(--stk) = 0; /* r2 */ *(--stk) = 0xdeadbeef; /* r5 */
*(--stk) = 0; /* r1 */ *(--stk) = 0xdeadbeef; /* r4 */
*(--stk) = (unsigned long)parameter; /* r0 : argument */ *(--stk) = 0xdeadbeef; /* r3 */
*(--stk) = 0xdeadbeef; /* r2 */
*(--stk) = 0xdeadbeef; /* r1 */
*(--stk) = (rt_uint32_t)parameter; /* r0 : argument */
/* cpsr */ /* cpsr */
if ((rt_uint32_t)tentry & 0x01) if ((rt_uint32_t)tentry & 0x01)

View File

@ -35,21 +35,23 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
{ {
rt_uint32_t *stk; rt_uint32_t *stk;
stack_addr += sizeof(rt_uint32_t);
stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
stk = (rt_uint32_t *)stack_addr; stk = (rt_uint32_t *)stack_addr;
*(stk) = (rt_uint32_t)tentry; /* entry point */ *(--stk) = (rt_uint32_t)tentry; /* entry point */
*(--stk) = (rt_uint32_t)texit; /* lr */ *(--stk) = (rt_uint32_t)texit; /* lr */
*(--stk) = 0; /* r12 */ *(--stk) = 0xdeadbeef; /* r12 */
*(--stk) = 0; /* r11 */ *(--stk) = 0xdeadbeef; /* r11 */
*(--stk) = 0; /* r10 */ *(--stk) = 0xdeadbeef; /* r10 */
*(--stk) = 0; /* r9 */ *(--stk) = 0xdeadbeef; /* r9 */
*(--stk) = 0; /* r8 */ *(--stk) = 0xdeadbeef; /* r8 */
*(--stk) = 0; /* r7 */ *(--stk) = 0xdeadbeef; /* r7 */
*(--stk) = 0; /* r6 */ *(--stk) = 0xdeadbeef; /* r6 */
*(--stk) = 0; /* r5 */ *(--stk) = 0xdeadbeef; /* r5 */
*(--stk) = 0; /* r4 */ *(--stk) = 0xdeadbeef; /* r4 */
*(--stk) = 0; /* r3 */ *(--stk) = 0xdeadbeef; /* r3 */
*(--stk) = 0; /* r2 */ *(--stk) = 0xdeadbeef; /* r2 */
*(--stk) = 0; /* r1 */ *(--stk) = 0xdeadbeef; /* r1 */
*(--stk) = (rt_uint32_t)parameter; /* r0 : argument */ *(--stk) = (rt_uint32_t)parameter; /* r0 : argument */
/* cpsr */ /* cpsr */

View File

@ -34,21 +34,24 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
{ {
rt_uint32_t *stk; rt_uint32_t *stk;
stack_addr += sizeof(rt_uint32_t);
stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
stk = (rt_uint32_t *)stack_addr; stk = (rt_uint32_t *)stack_addr;
*(stk) = (rt_uint32_t)tentry; /* entry point */
*(--stk) = (rt_uint32_t)tentry; /* entry point */
*(--stk) = (rt_uint32_t)texit; /* lr */ *(--stk) = (rt_uint32_t)texit; /* lr */
*(--stk) = 0; /* r12 */ *(--stk) = 0xdeadbeef; /* r12 */
*(--stk) = 0; /* r11 */ *(--stk) = 0xdeadbeef; /* r11 */
*(--stk) = 0; /* r10 */ *(--stk) = 0xdeadbeef; /* r10 */
*(--stk) = 0; /* r9 */ *(--stk) = 0xdeadbeef; /* r9 */
*(--stk) = 0; /* r8 */ *(--stk) = 0xdeadbeef; /* r8 */
*(--stk) = 0; /* r7 */ *(--stk) = 0xdeadbeef; /* r7 */
*(--stk) = 0; /* r6 */ *(--stk) = 0xdeadbeef; /* r6 */
*(--stk) = 0; /* r5 */ *(--stk) = 0xdeadbeef; /* r5 */
*(--stk) = 0; /* r4 */ *(--stk) = 0xdeadbeef; /* r4 */
*(--stk) = 0; /* r3 */ *(--stk) = 0xdeadbeef; /* r3 */
*(--stk) = 0; /* r2 */ *(--stk) = 0xdeadbeef; /* r2 */
*(--stk) = 0; /* r1 */ *(--stk) = 0xdeadbeef; /* r1 */
*(--stk) = (rt_uint32_t)parameter; /* r0 : argument */ *(--stk) = (rt_uint32_t)parameter; /* r0 : argument */
*(--stk) = SVCMODE; /* cpsr */ *(--stk) = SVCMODE; /* cpsr */
*(--stk) = SVCMODE; /* spsr */ *(--stk) = SVCMODE; /* spsr */

View File

@ -32,24 +32,26 @@
rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
rt_uint8_t *stack_addr, void *texit) rt_uint8_t *stack_addr, void *texit)
{ {
unsigned long *stk; rt_uint32_t *stk;
stk = (unsigned long *)stack_addr; stack_addr += sizeof(rt_uint32_t);
*(stk) = (unsigned long)tentry; /* entry point */ stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
*(--stk) = (unsigned long)texit; /* lr */ stk = (rt_uint32_t *)stack_addr;
*(--stk) = 0; /* r12 */ *(--stk) = (rt_uint32_t)tentry; /* entry point */
*(--stk) = 0; /* r11 */ *(--stk) = (rt_uint32_t)texit; /* lr */
*(--stk) = 0; /* r10 */ *(--stk) = 0xdeadbeef; /* r12 */
*(--stk) = 0; /* r9 */ *(--stk) = 0xdeadbeef; /* r11 */
*(--stk) = 0; /* r8 */ *(--stk) = 0xdeadbeef; /* r10 */
*(--stk) = 0; /* r7 */ *(--stk) = 0xdeadbeef; /* r9 */
*(--stk) = 0; /* r6 */ *(--stk) = 0xdeadbeef; /* r8 */
*(--stk) = 0; /* r5 */ *(--stk) = 0xdeadbeef; /* r7 */
*(--stk) = 0; /* r4 */ *(--stk) = 0xdeadbeef; /* r6 */
*(--stk) = 0; /* r3 */ *(--stk) = 0xdeadbeef; /* r5 */
*(--stk) = 0; /* r2 */ *(--stk) = 0xdeadbeef; /* r4 */
*(--stk) = 0; /* r1 */ *(--stk) = 0xdeadbeef; /* r3 */
*(--stk) = (unsigned long)parameter; /* r0 : argument */ *(--stk) = 0xdeadbeef; /* r2 */
*(--stk) = 0xdeadbeef; /* r1 */
*(--stk) = (rt_uint32_t)parameter; /* r0 : argument */
*(--stk) = SVCMODE; /* cpsr */ *(--stk) = SVCMODE; /* cpsr */
*(--stk) = SVCMODE; /* spsr */ *(--stk) = SVCMODE; /* spsr */

View File

@ -33,21 +33,23 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
{ {
rt_uint32_t *stk; rt_uint32_t *stk;
stack_addr += sizeof(rt_uint32_t);
stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
stk = (rt_uint32_t *)stack_addr; stk = (rt_uint32_t *)stack_addr;
*(stk) = (rt_uint32_t)tentry; /* entry point */ *(--stk) = (rt_uint32_t)tentry; /* entry point */
*(--stk) = (rt_uint32_t)texit; /* lr */ *(--stk) = (rt_uint32_t)texit; /* lr */
*(--stk) = 0; /* r12 */ *(--stk) = 0xdeadbeef; /* r12 */
*(--stk) = 0; /* r11 */ *(--stk) = 0xdeadbeef; /* r11 */
*(--stk) = 0; /* r10 */ *(--stk) = 0xdeadbeef; /* r10 */
*(--stk) = 0; /* r9 */ *(--stk) = 0xdeadbeef; /* r9 */
*(--stk) = 0; /* r8 */ *(--stk) = 0xdeadbeef; /* r8 */
*(--stk) = 0; /* r7 */ *(--stk) = 0xdeadbeef; /* r7 */
*(--stk) = 0; /* r6 */ *(--stk) = 0xdeadbeef; /* r6 */
*(--stk) = 0; /* r5 */ *(--stk) = 0xdeadbeef; /* r5 */
*(--stk) = 0; /* r4 */ *(--stk) = 0xdeadbeef; /* r4 */
*(--stk) = 0; /* r3 */ *(--stk) = 0xdeadbeef; /* r3 */
*(--stk) = 0; /* r2 */ *(--stk) = 0xdeadbeef; /* r2 */
*(--stk) = 0; /* r1 */ *(--stk) = 0xdeadbeef; /* r1 */
*(--stk) = (rt_uint32_t)parameter; /* r0 : argument */ *(--stk) = (rt_uint32_t)parameter; /* r0 : argument */
*(--stk) = Mode_SVC; /* cpsr */ *(--stk) = Mode_SVC; /* cpsr */
*(--stk) = Mode_SVC; /* spsr */ *(--stk) = Mode_SVC; /* spsr */

View File

@ -31,21 +31,23 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
{ {
rt_uint32_t *stk; rt_uint32_t *stk;
stack_addr += sizeof(rt_uint32_t);
stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
stk = (rt_uint32_t *)stack_addr; stk = (rt_uint32_t *)stack_addr;
*(stk) = (rt_uint32_t)tentry; /* entry point */ *(--stk) = (rt_uint32_t)tentry; /* entry point */
*(--stk) = (rt_uint32_t)texit; /* lr */ *(--stk) = (rt_uint32_t)texit; /* lr */
*(--stk) = 0; /* r12 */ *(--stk) = 0xdeadbeef; /* r12 */
*(--stk) = 0; /* r11 */ *(--stk) = 0xdeadbeef; /* r11 */
*(--stk) = 0; /* r10 */ *(--stk) = 0xdeadbeef; /* r10 */
*(--stk) = 0; /* r9 */ *(--stk) = 0xdeadbeef; /* r9 */
*(--stk) = 0; /* r8 */ *(--stk) = 0xdeadbeef; /* r8 */
*(--stk) = 0; /* r7 */ *(--stk) = 0xdeadbeef; /* r7 */
*(--stk) = 0; /* r6 */ *(--stk) = 0xdeadbeef; /* r6 */
*(--stk) = 0; /* r5 */ *(--stk) = 0xdeadbeef; /* r5 */
*(--stk) = 0; /* r4 */ *(--stk) = 0xdeadbeef; /* r4 */
*(--stk) = 0; /* r3 */ *(--stk) = 0xdeadbeef; /* r3 */
*(--stk) = 0; /* r2 */ *(--stk) = 0xdeadbeef; /* r2 */
*(--stk) = 0; /* r1 */ *(--stk) = 0xdeadbeef; /* r1 */
*(--stk) = (rt_uint32_t)parameter; /* r0 : argument */ *(--stk) = (rt_uint32_t)parameter; /* r0 : argument */
/* cpsr */ /* cpsr */