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:
commit
d78f5eb674
|
@ -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 */
|
||||||
|
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
Loading…
Reference in New Issue